【问题标题】:How can I lock my camera Z axis rotation in Unity?如何在 Unity 中锁定我的相机 Z 轴旋转?
【发布时间】:2019-01-31 09:56:10
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# unity3d camera axis


    【解决方案1】:

    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);
    }
    

    【讨论】:

    • 我建议最后乘以向量,因为浮点不被视为可交换的。您拥有它的方式是将浮点数和向量相乘 3 次,这比在乘以向量之前将浮点数相乘要慢。
    【解决方案2】:

    如果你想在两个轴上旋转一个对象,默认情况下第三个轴会旋转,你不能锁定它,因为它是现实世界的事实。在现实世界中尝试这个 3d 对象旋转任何两个轴,第三个将自动旋转。如果您旋转一个轴,其他两个将被固定。 谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多