我有一个脚本,通过使用鼠标中键控制Unity中的正交相机平移运动 . 世界中心(0,0,0)的空GameObject(例如名称为MainCamPivot(请参见图片))充当摄像机的父级 . 相机本身具有Vector3的局部欧拉角(45f,225f,0f) . 我可以使用此脚本(连接到相机)在X和Y轴上很好地平移/移动相机:
public float panSpeed = 0.05f;
private Vector3 lastMousePos;
void Start ()
{
lastCamPos = transform.position;
}
void Update()
{
if(Input.GetMouseButtonDown(2))
{
lastMousePos = Input.mousePosition;
}
if(Input.GetMouseButton(2))
{
Vector3 touchDeltaPosition = Input.mousePosition - lastMousePos;
transform.Translate(-touchDeltaPosition.x * panSpeed, -touchDeltaPosition.y * panSpeed, 0);
lastMousePos = Input.mousePosition;
}
// To limit the orthographic camera panning movement:
if(transform.localPosition.x < 10f) transform.localPosition = new Vector3(10f, transform.localPosition.y, 16.3f);
if(transform.localPosition.x > 23f) transform.localPosition = new Vector3(23f, transform.localPosition.y, 16.3f);
if(transform.localPosition.y < 15f) transform.localPosition = new Vector3(transform.localPosition.x, 15f, 16.3f);
if(transform.localPosition.y > 28f) transform.localPosition = new Vector3(transform.localPosition.x, 28f, 16.3f);
}
为了限制摄像机的平移运动,我为摄像机的X和Y位置设置了一些限制 . 问题是摄像机的Z位置值总是在变化,因此为摄像机的Z位置设置固定位置将使摄像机对角平移/对角移动,如下图所示:
使用脚本编写正确限制正交摄像机平移运动的最佳方法是什么? (如下图)
1 回答
如何而不是使用枢轴,在玩家按住按钮时根据鼠标位置的差异设置摄像机的位置 . 您在上面尝试做的是相对于块状物体移动相机 . 相反,您应该相对于自身移动相机 .
当用户点击按钮并在LateUpdate()中获取鼠标位置,当玩家仍然按住按钮时,调用:
这样可行 .