随后使用RotateRound()也会旋转3轴



我想通过移动鼠标来围绕角色旋转相机,并尝试了以下操作:

m_Cam.RotateAround(m_Character.transform.localPosition, Vector3.up, 
Input.GetAxis("Mouse X")* rotationSpeedY * Time.deltaTime);
m_Cam.RotateAround(m_Character.transform.localPosition, Vector3.right,
Input.GetAxis("Mouse Y") * rotationSpeedX * Time.deltaTime);

但如果我同时执行两行代码,它也会旋转z轴。如果我只使用其中一种,它们就会按预期工作。所以第一个水平旋转相机,第二个垂直旋转相机。但如果我启用这两个,它们仍然会这样做,但z轴也会旋转,我不知道为什么。

它们在FixedUpdate((中被调用。

有人能解释一下这是怎么发生的,我该怎么解决吗?

如果在真实对象上进行两次旋转,您会注意到它确实也会在其局部Z轴上移动;((在Inspector中,您可以看到局部Euler轴。(

如果在全局世界空间轴上执行两个旋转,就会发生这种情况。

作为解决方案,您需要确保Y轴在全局空间中旋转,而X轴在相机的局部区域中旋转。

您可以通过使用m_Cams局部X轴在X 中进行旋转来实现这一点

//                                                      | global Y axis
//                                                      V
m_Cam.RotateAround(m_Character.transform.localPosition, Vector3.up, Input.GetAxis("Mouse X")* rotationSpeedY * Time.deltaTime);
//                                                      | local X axis
//                                                      V
m_Cam.RotateAround(m_Character.transform.localPosition, m_Cam.right, Input.GetAxis("Mouse Y") * rotationSpeedX * Time.deltaTime);

最新更新