通过四元数了解旋转
Know rotation via Quaternion
我目前正在尝试使用 Oculus Rift 制作一些东西。
唯一的控件是 Oculus 相机。
玩家一直在向前移动,但我想让他旋转、上升和下降。要上升,玩家必须向上看 10° 到 45°,所有方向都一样。
我目前正在使用 Unity,我得到了一个关于相机旋转的四元数。
有脚本吗?我该如何自己做,或者至少如何将四元数转换为旋转?
好消息!出于您的目的,您不需要直接处理四元数。不过,一点点矢量数学可能会有所帮助。
transform.forward
在任何脚本中都会为您提供脚本所附对象的前进方向。如果它在相机上,它将是玩家正在看的方向。
仅使用摄像机的前向和玩家移动的前向,您可以计算出玩家旋转所需的信息。
Vector3.Angle(transform.forward, cameraObject.transform.forward)
会给出两个正向之间的角度。
Vector3.Cross(transform.forward, cameraObject.transform.forward)
会给你旋转轴。
您可以检查角度是否在想要的范围内,然后使用
transform.Rotate(Vector3.Cross(transform.forward, cameraObject.transform.forward), rotationSpeed * Time.deltaTime)
执行旋转。如果旋转方向与您想要的方向相反,您可能需要将两个参数的顺序切换为 Vector3.Cross
.
我目前正在尝试使用 Oculus Rift 制作一些东西。
唯一的控件是 Oculus 相机。
玩家一直在向前移动,但我想让他旋转、上升和下降。要上升,玩家必须向上看 10° 到 45°,所有方向都一样。
我目前正在使用 Unity,我得到了一个关于相机旋转的四元数。
有脚本吗?我该如何自己做,或者至少如何将四元数转换为旋转?
好消息!出于您的目的,您不需要直接处理四元数。不过,一点点矢量数学可能会有所帮助。
transform.forward
在任何脚本中都会为您提供脚本所附对象的前进方向。如果它在相机上,它将是玩家正在看的方向。
仅使用摄像机的前向和玩家移动的前向,您可以计算出玩家旋转所需的信息。
Vector3.Angle(transform.forward, cameraObject.transform.forward)
会给出两个正向之间的角度。
Vector3.Cross(transform.forward, cameraObject.transform.forward)
会给你旋转轴。
您可以检查角度是否在想要的范围内,然后使用
transform.Rotate(Vector3.Cross(transform.forward, cameraObject.transform.forward), rotationSpeed * Time.deltaTime)
执行旋转。如果旋转方向与您想要的方向相反,您可能需要将两个参数的顺序切换为 Vector3.Cross
.