首页 > 解决方案 > 统一对象不围绕正确的轴旋转

问题描述

所以我正在编写一个能够使用鼠标移动旋转对象的脚本。我设置的场景是一个摄像机,前面有一个物体。向左移动鼠标导致对象向左旋转,向上移动鼠标导致对象向上旋转,等等。现在我有一个小问题。当我将对象向左或向右旋转 90 度然后向上或向下旋转时,它会像我想要的那样围绕 Z 轴而不是 X 轴旋转。发生这种情况是因为 Z 和 X 轴在向左或向右旋转时当然会与我之前操纵的 Y 轴一起旋转。

我制作了两个 GIF 来展示这个问题:

这是我目前正在使用的代码:

public float object_rotSens = 100.0f;
float object_rotY = 0.0f;
float object_rotX = 0.0f;    

void Update()
{
object_rotX += Input.GetAxis("Mouse X") * object_rotSens * Time.deltaTime;
object_rotY += Input.GetAxis("Mouse Y") * object_rotSens * Time.deltaTime;
objectImRotating.transform.localEulerAngles = new Vector3(object_rotY, -object_rotX, 0);
}

我希望有人可以帮助我更改代码,这样即使对象绕 Y 轴旋转任意量,我也可以进行首选旋转。提前致谢!

更新:

Chris H 帮我解决了这个问题。对于任何有同样问题的人,这里是帮助我解决问题的方法:

object_rotX = Input.GetAxis("Mouse X") * object_rotSens * Time.deltaTime;
object_rotY = Input.GetAxis("Mouse Y") * object_rotSens * Time.deltaTime;
objectImRotating.transform.RotateAround(objectImRotating.transform.position, new Vector3(object_rotY, -object_rotX, 0), 100 * Time.deltaTime);

标签: c#unity3d

解决方案


尝试使用Transform.RotateAround代替 localEulerAngles。


推荐阅读