Unity3D:Unity 中的旋转和定向
在线工具推荐:Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D数字孪生场景编辑器
Unity 中的旋转和定向
在 Unity 中,您可以使用欧拉角和四元数来表示旋转和方向。这些表示是等效的,但具有不同的用途和限制。
通常,使用变换组件旋转场景中的对象,该组件将方向显示为欧拉角。但是,Unity 在内部将旋转和方向存储为四元数,这对于可能导致云台锁定的更复杂的运动非常有用。
欧拉角
在变换坐标中,Unity 使用矢量属性变换显示旋转.eulerAngles
X、Y 和 Z。与法线矢量不同,这些值实际上表示围绕 X、Y 和 Z 轴旋转的角度(以度为单位)。
欧拉角旋转围绕三个轴执行三个单独的旋转。Unity 依次围绕 z 轴、x 轴和 y 轴执行欧拉旋转。这种旋转方法是外在旋转;旋转发生时,原始坐标系不会更改。
要旋转游戏对象,您可以输入希望每个轴在变换组件中旋转多远的角度值。要使用脚本旋转游戏对象,请使用 。如果转换为欧拉角进行计算和旋转,则可能会遇到万向节锁定问题。Transform.eulerAngles
云台锁
当 3D 空间中的物体失去自由度并且只能在二维内旋转时,它被称为云台锁定。如果两个轴平行,则欧拉角可以发生万向节锁定。 如果未在脚本中将旋转值转换为欧拉角,则使用四元数应防止云台锁定。
如果云台锁定确实有问题,则可以在用于旋转时避免欧拉角。您也可以在每个轴上使用并将它们相乘(四元数乘法依次应用每个旋转)。Transform.RotateAroundQuaternion.AngleAxis
四元数
四元数为 3D 空间中空间方向和旋转的独特表示提供数学符号。四元数使用四个数字对 3D 中围绕单位轴的旋转方向和角度进行编码。这四个值是复数,而不是角度或度数。您可以查看四元数的数学以获取更多信息。
Unity 将旋转值转换为四元数以存储它们,因为四元数旋转的计算效率高且稳定。编辑器不会将旋转显示为四元数,因为单个四元数不能表示围绕任何轴大于360 度的旋转。
如果使用四元数类,则可以直接使用四元数。如果使用脚本进行旋转,则可以使用 Quadreuion 类和函数来创建和更改旋转值。您可以将值作为欧拉角应用于旋转,但需要将它们存储为四元数以避免出现问题。
在欧拉角和四元数之间转换
要在四元数和欧拉角之间进行转换,以您喜欢的方式查看和编辑旋转,可以使用脚本:
- 要从欧拉角转换为四元数,可以使用
四元数.欧拉
函数。 - 要将四元数转换为欧拉角,可以使用
四元数.eulerAngles
函数。
此文由3D建模学习工作室整理翻译,转载请注明出处!