我想通过移动鼠标来围绕角色旋转相机,并尝试了以下操作:
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_Cam
s局部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);