【unity2D】API-学习记录11-关于旋转:欧拉角与四元数
目标
了解Unity中有关旋转的知识。
前言
UnityAPI中文文档里,关于旋转的解释,非常详细清楚。这里把其中的重点总结出来。
Unity中如何旋转
在Unity中,一般以两种方式实现旋转:
- 欧拉角(Euler Angle)
- 四元数(Quaternion)
欧拉角Euler Angle
欧拉角由按顺序应用的 X、Y 和 Z 三个角度值来表示,能被直观地读出来,正如下图中Transform中的Rotation。
欧拉角又分为静态和动态:
- 静态:绕世界坐标系三个轴的旋转,物体旋转过程中坐标轴保持静止。
- 动态:绕物体坐标系三个轴的旋转,物体旋转过程中坐标轴随着物体做相同的转动。
虽然欧拉角非常直观方便,但动态欧拉角存在万向节死锁的局限。
简单来讲,就是物体依次沿三个轴旋转时(尤其是前两次旋转中有转动90°时),则可能使“物体坐标系的某个轴”和“世界坐标系的一个非对应轴”相重合,即丢失某个轴向的自由度,使旋转偏离预期效果。
由于2D游戏一般只绕Z轴旋转,就不过多展开万向节死锁问题,具体请参考关于万向节死锁(Gimbal Lock)(续)
为了避免万向节死锁,四元数出场。
四元数Quaternion
四元数可用于表示游戏对象的方向或旋转。此表示方式在内部由四个数字组成(在 Unity 中称为 x、y、z 和 w),但是这些数字不代表角度或轴,通常不需要直接访问它们。除非特别想深入研究四元数的数学原理,否则只需要知道四元数代表 3D 空间中的旋转即可,通常不需要知道或修改 x、y 和 z 属性。
四元数涉及某些数学知识,直观上难以理解。但 Unity 在内部将所有游戏对象的旋转存储为四元数,因为这种表示方式的好处超过了局限性。
补充
在Unity里,有个专门做旋转的类叫Quaternion(四元数)。具体怎么用,之后再学。