【unity2D】API-学习记录11-关于旋转:欧拉角与四元数

目标

了解Unity中有关旋转的知识。


前言

UnityAPI中文文档里,关于旋转的解释,非常详细清楚。这里把其中的重点总结出来。


Unity中如何旋转

在Unity中,一般以两种方式实现旋转:

  1. 欧拉角(Euler Angle)
  2. 四元数(Quaternion)

欧拉角Euler Angle

欧拉角由按顺序应用的 X、Y 和 Z 三个角度值来表示,能被直观地读出来,正如下图中Transform中的Rotation。
image

欧拉角又分为静态和动态:

  1. 静态:绕世界坐标系三个轴的旋转,物体旋转过程中坐标轴保持静止。
  2. 动态:绕物体坐标系三个轴的旋转,物体旋转过程中坐标轴随着物体做相同的转动

虽然欧拉角非常直观方便,但动态欧拉角存在万向节死锁的局限

简单来讲,就是物体依次沿三个轴旋转时(尤其是前两次旋转中有转动90°时),则可能使“物体坐标系的某个轴”和“世界坐标系的一个非对应轴”相重合,即丢失某个轴向的自由度,使旋转偏离预期效果。

由于2D游戏一般只绕Z轴旋转,就不过多展开万向节死锁问题,具体请参考关于万向节死锁(Gimbal Lock)(续)

为了避免万向节死锁,四元数出场。


四元数Quaternion

四元数可用于表示游戏对象的方向或旋转。此表示方式在内部由四个数字组成(在 Unity 中称为 x、y、z 和 w),但是这些数字不代表角度或轴,通常不需要直接访问它们。除非特别想深入研究四元数的数学原理,否则只需要知道四元数代表 3D 空间中的旋转即可,通常不需要知道或修改 x、y 和 z 属性。

四元数涉及某些数学知识,直观上难以理解。但 Unity 在内部将所有游戏对象的旋转存储为四元数,因为这种表示方式的好处超过了局限性。


补充

在Unity里,有个专门做旋转的类叫Quaternion(四元数)。具体怎么用,之后再学。


参考资料

Unity 中的旋转和方向
关于万向节死锁(Gimbal Lock)(续)

posted @ 2021-05-12 09:19  AshScops  阅读(303)  评论(0编辑  收藏  举报