如何在Unity中锁定相机的Z轴旋转?

时间:2019-01-31 09:56:10

标签: c# unity3d camera axis

我正在使用鼠标位置旋转相机:

void FixedUpdate()
{
    transform.Rotate(-Input.GetAxis("Mouse Y") * rotationspeed * Time.deltaTime, Input.GetAxis("Mouse X") * rotationspeed * Time.deltaTime, 0);
}

问题是旋转了一段时间后,相机也开始在Z轴上旋转。如何锁定相机的Z轴旋转?

2 个答案:

答案 0 :(得分:0)

如果要沿两个轴旋转对象,则默认情况下,第三个轴将旋转,因为它是真实世界,所以无法锁定它。在现实世界中尝试此操作3d对象旋转的任何两个轴都会自动旋转。如果旋转一个轴,则另外两个将固定。 谢谢。

答案 1 :(得分:0)

Transform.Rotate有一个可选参数

Space relativeTo = Space.Self

因此默认情况下将其设置为Sapce.Self,以便它绕对象的局部轴旋转。

所以发生的事情是,一旦您向下看更改本地X轴,您的本地Y轴不再指向正上方,而是现在指向前方。因此,如果现在绕着该局部Y轴旋转,则您的局部视界突然变得不再与世界视界对齐。


您想做的事情(实际上您也可以在上面的链接的示例中看到)围绕着世界上的 Y轴旋转,但是围绕着 X轴旋转在本地空间

像这样

[SerializeField] private float rotationspeed;

private void FixedUpdate()
{
    // rotate around global world Y
    transform.Rotate(Input.GetAxis("Mouse X") * rotationspeed * Time.deltaTime, 0, 0, Space.World);

    // rotate around local X
    transform.Rotate(0, -Input.GetAxis("Mouse Y") * rotationspeed * Time.deltaTime, 0);
}