翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷,而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。
Rotation and orientation in Unity 🔗
Unity 使用左手坐标系统。在 Unity 中,你可以使用欧拉角和四元数表示旋转和方向。这些表示方法是等效的,但在使用和限制方面有所不同。
通常,你可以使用Transform 组件在你的场景中旋转物体,它将方向显示为欧拉角。然而,Unity 在内部存储旋转和方向时使用四元数,这对于更复杂的动作可能会导致万向锁很有用。
左手坐标系统 🔗
Unity 的左手坐标系的轴表示,显示了从正 x 轴到正 y 轴的旋转方向,在沿着正 z 轴的方向观察时,方向是逆时针的。
坐标系描述了三维空间中物体的位置。Unity 使用左手坐标系:正 x 轴指向右侧,正 y 轴指向上方,正 z 轴指向前方。Unity 的左手坐标系意味着从正 x 轴到正 y 轴的旋转方向是逆时针的,在沿着正 z 轴的方向观察时。
欧拉角 🔗
在 Transform 坐标中,Unity 使用属性Transform.eulerAngles
的 X、Y 和 Z 来显示旋转。与普通向量不同,这些值实际上表示围绕 X、Y 和 Z 轴旋转的角度(以度为单位)。
欧拉角旋转执行三次围绕三个轴的独立旋转。Unity 按 z 轴、x 轴和 y 轴的顺序依次执行欧拉角旋转。这种旋转方法是外旋转;在旋转发生时,原始坐标系不会改变。
要旋转一个GameObject,你可以在 Transform 组件中输入每个轴旋转的角度值。要使用脚本旋转你的游戏对象,可以使用Transform.eulerAngles
。如果你将旋转值转换为欧拉角来进行计算和旋转,可能会出现万向锁的问题。
万向锁 🔗
当一个物体在三维空间中失去一个自由度,只能在两个维度内旋转时,称为万向锁。欧拉角在两个轴变得平行时,可能会发生万向锁。如果你在脚本中不将旋转值转换为欧拉角,使用四元数应该可以避免万向锁。
如果你在万向锁方面遇到问题,可以避免使用欧拉角,而是使用Transform.RotateAround
进行旋转。你还可以在每个轴上使用Quaternion.AngleAxis
,然后将它们相乘(四元数乘法依次应用每个旋转)。
四元数 🔗
四元数为三维空间中的空间方向和旋转提供了数学表示。四元数使用四个数字来编码在三维中围绕单位轴的旋转方向和角度。这四个值是复数,而不是角度或度数。你可以详细了解四元数的数学知识。
Unity 将旋转值转换为四元数存储,因为四元数旋转的计算效率高且稳定。Unity 编辑器不显示四元数作为旋转,因为单个四元数无法表示大于 360 度的旋转。
如果你使用 Quaternion 类,可以直接使用四元数。如果在脚本中进行旋转,可以使用 Quaternion 类和函数来创建和改变旋转值。你可以将值应用到旋转中作为欧拉角,但你需要将它们存储为四元数以避免问题。
欧拉角和四元数之间的转换 🔗
为了在你喜欢的方式中查看和编辑旋转,你可以使用脚本进行欧拉角和四元数之间的转换:
- 从欧拉角转换为四元数,可以使用
Quaternion.Euler
函数。 - 将四元数转换为欧拉角,可以使用
Quaternion.eulerAngles
函数。
结论 🔗
搬砖愉快!