陈巧倩

Unity中文版-Create Gameplay Rotation and orientation in Unity(自翻译)

· 82 words · 1 minutes to read
Categories: Unity
Tags: Document

翻译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函数。

结论 🔗

搬砖愉快!