我正在编写主摄像头在XZ轴上移动的脚本。当光标接近相应的屏幕边缘时,摄像机应该水平移动(前、后、右、左)。左右移动的效果很好。
另一方面,在z轴上向后移动摄像机并不可行,因为摄像机是微微旋转的。
因此,当你试图将它水平向前移动时,它反而会离物体越来越近。
if (Input.mousePosition.y >= Screen.height - brdThcknss)
{ //this line is to be replaced
//transform.Translate(Vector3.forward * Time.deltaTime * panSpeed);
}
if (Input.mousePosition.y <= brdThcknss)
{//this line is to be replaced
//transform.Translate(Vector3.back * Time.deltaTime * panSpeed);
}
if (Input.mousePosition.x >= Screen.width - brdThcknss)
{
transform.Translate(Vector3.right * Time.deltaTime * panSpeed);
}
if (Input.mousePosition.x <= brdThcknss)
{
transform.Translate(Vector3.left * Time.deltaTime * panSpeed);
}
还有必要提及的是,无论摄像机的角度如何(摄像机的轨道),摄像机都应该在世界的XZ平面上移动。我可以用什么来替换这些注释行,使摄像机执行所需的运动?
AresCaelum的评论很可能是正确的,但如果你想完全避免Translate功能,你可以简单地给对象的位置分配一个新的Vector3。
就像这样。
transform.position = new Vector3(newX, transform.position.y, newZ);
也可以在局部位置上做这样的操作,比如
transform.localposition = new Vector3(x,y,z);
如果你想避免每次运行这段代码时都创建一个新的Vector3,你可以简单地设置一个Vector3变量(我们称它为 "pos"),然后执行以下操作。
Vector3 pos = Vector3.zero;
void Start()
{
pos.y = whateverYValueYouWant;
}
void Update()
{
pos.x = newX;
pos.z = newZ;
transform.position = pos;
}