缩放约束(ScaleConstraints)光源3D应用程序中的旋转值

缩放约束(ScaleConstraints)光源3D应用程序中的旋转值

规模限制

光源

Unity 中的旋转和方向

3D 应用中的旋转通常以两种方式之一表示:四元数或欧拉角。 每种方法都有其自身的用途和缺点。 Unity内部使用四元数表示,但在Inspector中显示等效的欧拉角值,以便于编辑。

欧拉角和四元数欧拉角

欧拉角由依次应用的三个角度值 X、Y 和 Z 表示。 要将欧拉旋转应用于特定的游戏对象,将依次应用每个旋转值游戏策划,作为绕其相应轴的旋转。

四元数

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

就像向量可以表示位置或方向(从原点测量的方向)一样,四元数可以表示方向或旋转:从旋转的“原点”或“恒等”测量的旋转。 由于测量旋转的方式(从一个方向到另一个方向),四元数不能表示超过 180 度的旋转。

Unity 在内部将所有游戏对象旋转存储为四元数,因为这种表示形式的好处超过了限制。

变换检查器使用欧拉角显示旋转,因为这种形式更容易理解和编辑。 Unity 将 Inspector 中输入的用于旋转游戏对象的新值转换为游戏对象的新四元数旋转值。

游戏对象的旋转在 Inspector 中以欧拉角的形式显示和编辑,但在内部存储为四元数

游戏对象旋转在检查器中显示和编辑为欧拉角,但在内部存储为四元数

另外,作为副作用,可以在 Inspector 中输入游戏对象的旋转值,例如 X: 0、Y: 365、Z: 0。但是,这个值不能表示为四元数,因此在输入时运行模式你会看到游戏对象的旋转值变成X:0,Y:5,Z:0。这是因为Unity将旋转转换为四元数,四元数没有“全360度旋转加5度”的概念并设置为与旋转结果相同的方向。

要了解有关使用四元数类编写脚本的更多信息,请参阅四元数用户手册页和四元数脚本参考

对动画的影响

许多 3D 制作包以及 Unity 自己的内部动画窗口都允许使用欧拉角来指定动画期间的旋转。

这些旋转值往往可能超出四元数可以表示的范围。 例如,如果游戏对象旋转720度,则可以用欧拉角“X:0,Y:720,Z:0”来表示。 但这不能用四元数值来表示。

Unity的动画窗口

在Unity自己的动画窗口中,有一些选项允许您指定如何执行旋转插值:使用四元数插值或欧拉插值。 通过指定欧拉插值,您可以告诉 Unity 您希望使用角度指定完整的运动范围。 然而,对于四元数旋转,您只希望旋转以特定方向结束,因此 Unity 使用四元数插值并旋转最短距离以到达该位置。 有关详细信息unity数值平滑变化,请参阅使用动画曲线。

外部动画源

从外部源导入动画时,这些文件通常包含 Euler 格式的旋转关键帧动画。 默认情况下,Unity 会对这些动画重新采样,并为动画中的每一帧生成一个新的四元数关键帧unity数值平滑变化,从而避免关键帧之间的旋转可能超出四元数的有效范围的情况。

例如,假设您有两个关键帧,相距 6 帧,并且第一个关键帧上的 X 值为 0,第二个关键帧上的 X 值为 270。 如果不进行重采样,这两个关键帧之间的四元数插值将以相反方向旋转 90 度,因为这是从第一个方向到第二个方向的最短路径。 但是,通过在每个帧上重新采样和添加关键帧,关键帧之间现在只有 45 度,因此旋转效果很好。

但是,仍然存在某些情况,即使进行重新采样,导入动画的四元数表示也可能与原始动画不够匹配。 因此,在Unity 5.3及以上版本中,您可以选择关闭动画重采样,以便可以使用原始的欧拉动画关键帧来代替。 有关更多信息,请参阅欧拉曲线旋转的动画导入。

规模限制

光源

文章来源:https://docs.unity3d.com/cn/2020.2/Manual/QuaternionAndEulerRotationsInUnity.html