版本:Unity 6 (6000.0)
语言:English
变换
静态游戏对象

Unity 中的旋转和方向

Unity 使用左手坐标系。在 Unity 中,您可以使用欧拉角和四元数来表示旋转和方向。这些表示方式是等价的,但用途和限制不同。

通常,您会在场景场景包含游戏环境和菜单。可以将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您可以放置环境、障碍物和装饰物,本质上是分段设计和构建游戏。 更多信息
参见 词汇表
中使用变换组件变换组件确定场景中每个对象的 位置、旋转和缩放。每个游戏对象都有一个变换。 更多信息
参见 词汇表
旋转对象,该组件以欧拉角显示方向。但是,Unity 在内部将旋转和方向存储为四元数,这对于更复杂的运动很有用,否则可能会导致万向节锁。

左手坐标系

The axes of Unitys left-handed coordinate system, showing that the direction of rotation from the positive x-axis to the positive y-axis is counterclockwise when looking along the positive z-axis.
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 轴执行欧拉旋转。这种旋转方法是外旋;在旋转过程中,原始坐标系不会发生变化。

要旋转游戏对象Unity 场景中的基本对象,可以表示角色、道具、场景、摄像机、路点等。游戏对象的函数由附加在其上的组件定义。 更多信息
参见 词汇表
,您可以输入每个轴要旋转到的角度值到 Transform 组件中。要使用脚本旋转游戏对象,请使用 Transform.eulerAngles。如果您将旋转值转换为欧拉角进行计算和旋转,则可能会遇到万向节锁问题。

万向节锁

当 3D 空间中的对象失去一个自由度并且只能在二维空间内旋转时,称为万向节锁。如果两个轴变得平行,则欧拉角可能会发生万向节锁。如果您在脚本中没有将旋转值转换为欧拉角,则使用四元数应可以防止万向节锁。

如果您确实遇到了万向节锁问题,则可以在旋转时使用 Transform.RotateAround 来避免欧拉角。您还可以对每个轴使用 Quaternion.AngleAxis 并将它们相乘(四元数乘法依次应用每个旋转)。

四元数

四元数提供了在 3D 空间中表示空间方向和旋转的唯一表示的数学符号。四元数使用四个数字来编码围绕单位轴在 3D 中旋转的方向和角度。这四个值是复数,而不是角度或度数。您可以查看四元数的数学知识以获取更多信息。

Unity 将旋转值转换为四元数以进行存储,因为四元数旋转计算起来高效且稳定。Unity 编辑器不将旋转显示为四元数,因为单个四元数无法表示围绕任何轴大于 360 度的旋转。

如果您使用Quaternion 类,则可以直接使用四元数。如果您使用脚本进行旋转,则可以使用 Quaternion 类和函数来创建和更改旋转值。您可以将值应用于旋转作为欧拉角,但需要将它们存储为四元数以避免问题。

在欧拉角和四元数之间转换

要转换四元数和欧拉角以您首选的方式查看和编辑旋转,可以使用脚本。

其他资源

变换
静态游戏对象