Quaternion 与 Euler 的介绍

欧拉角是度角,如 90 度,180 度,45 度,30 度。四元数与欧拉角的不同之处在于它们代表单位球上的一个点(半径为 1 个单位)。你可以将此球体视为你在三角学中学习的单位圆的 3D 版本。四元数与欧拉角的不同之处在于它们使用虚数来定义 3D 旋转。

虽然这可能听起来很复杂(并且可以说是这样),但 Unity 具有很强的内置函数,允许你在欧拉角和四元数之间切换,以及修改四元数的函数,而不需要知道关于它们背后的数学的单一事物。

在 Euler 和 Quaternion 之间转换

// Create a quaternion that represents 30 degrees about X, 10 degrees about Y
Quaternion rotation = Quaternion.Euler(30, 10, 0);

// Using a Vector
Vector3 EulerRotation = new Vector3(30, 10, 0);
Quaternion rotation = Quaternion.Euler(EulerRotation);

// Convert a transfroms Quaternion angles to Euler angles
Quaternion quaternionAngles = transform.rotation;
Vector3 eulerAngles = quaternionAngles.eulerAngles;

为什么要使用四元数?

四元数解决了一个称为万向节锁定的问题。当主旋转轴与第三旋转轴共线时,会发生这种情况。这是一个视觉示例 @ 2:09