首页 > 解决方案 > 请在 Unity 中解释 transform.rotate

问题描述

有人可以解释为什么这种方法不能作为正常的 fps 相机运动吗?我将 Z 轴设置为 0,但在测试时它会发生变化。我可以使用四元数,但我真的不明白为什么这种方法不起作用。

void onCameraLook() {
    mouseX = Input.GetAxis("Mouse X") * Time.deltaTime * sensitivity;
    mouseY = Input.GetAxis("Mouse Y") * Time.deltaTime * sensitivity;

    transform.Rotate(-mouseY, mouseX, 0, Space.Self);
}

标签: c#unity3d

解决方案


如果您与您通话RotateSpace.Self您将围绕其局部轴旋转对象。
对于“普通 fps 相机”,这对于垂直旋转很好,您希望围绕局部 x/右轴旋转,但对于水平旋转,您希望对象围绕全局 y/上轴旋转。有关更详细的帖子,请参阅在两个轴上旋转对象

所以你的代码应该是:

void onCameraLook() {
    mouseX = Input.GetAxis("Mouse X") * Time.deltaTime * sensitivity;
    mouseY = Input.GetAxis("Mouse Y") * Time.deltaTime * sensitivity;

    transform.Rotate(-mouseY, 0, 0, Space.Self);
    transform.Rotate(0, mouseX, 0, Space.World);        
}

推荐阅读