根运动 (Root Motion) – 工作原理
身体变换
身体变换 (Body Transform) 是角色的质心。它用于 Mecanim 重定位引擎,提供最稳定的位移模型。身体方向 (Body Orientation) 是下半身方向与上半身方向的平均,与 Avatar T 字姿势 (T-Pose) 相关。
身体变换 (Body Transform) 和方向 (Orientation) 存储在动画片段 (Animation Clip) 中(使用 Avatar 中设置的肌肉线条)。它们是存储在动画片段 (Animation Clip) 中的唯一世界空间曲线。其他一切事项:肌肉线条和 IK 目标(四肢 (Hands and Feet))相对身体变换存储。
根变换
根变换 (Root Transform) 是身体变换 (Body Transform) 在 Y 平面上的投影,在运行时计算。在每一帧,根变换 (Root Transform) 中的变化都会计算出来。然后变换的变化会被应用到游戏对象 (Game Object) 上,使之移动。
角色下面的圆代表根变换
动画片段检视器
动画片段编辑器 (Animation Clip Editor) 设置(根变换旋转 (Root Transform Rotation)、根变换位置 (Root Transform Position) (Y) 和根变换位置 (XZ))让您从身体变换 (Body Transform) 控制根变换 (Root Transform) 投影。根据这些设置,身体变换 (Body Transform) 的某些部分可能会是转移的根变换 (Root Transform)。例如,您可以决定是否要让运动 Y 位置成为根运动 (Root Motion)(轨迹)或者姿势(身体转换)的一部分,这就是所谓的合并到姿势 (Baked into Pose)。
根变换旋转
合并到姿势 (Bake into Pose):方向与身体变换(或者姿势 (Pose))保持一致。根方向 (Root Orientation) 保持不变,增量方向 (Orientation) 相同。这意味着,该 AnimationClip 完全不会旋转游戏对象 (Game Object)。
只有拥有类似启停根方向 (Root Orientation) 的 AnimationClip 才会使用该选项。您会在 UI 看到绿灯 (Green Light),告知您某个 AnimationClip 是好的候选片段。合适的候选片段应当是直走或跑步动画。
基于 (Based Upon):该选项允许您设置片段的方向。片段使用身体方向 (Body Orientation) 定向,以循着身体的向前向量。该默认设置适用于大多数动作捕捉 (Motion Capture)(动态捕捉 (Mocap))数据,比如走路、跑步、跳跃,但不能用于扫射之类的动作,这些动作与身体的向前向量垂直。在这种情况下,可以使用偏移(Offset) 设置手动调整方向。最后,您会在导入的片段中找到自动添加授权位移的原始方向 (Original)。它常常与键帧 (Keyframed) 数据配合使用,以遵循美工设置的方向。
偏移 (Offset):为基于 (Based Upon) 选择该项时用来输入偏移量。
根变换位置 (Y)
该项使用根变换旋转 (Root Transform Rotation) 中描述的相同概念。
合并到姿势 (Bake Into Pose):运动的 Y 分量与身体变换 (Body Transform)(姿势 (Pose))保持一致。根变换 (Root Transform) 的 Y 分量保持不变,增量根位置 Y (Delta Root Position Y) 为 0。这意味着,该片段不会更改游戏对象高度 (Game Object Height)。您再次看到绿灯 (Green Light),告知您某个片段是将 Y 动作合并到姿势的良好候选片段。
大多数 AnimationClip 会启用该设置。只有更改游戏对象 (GameObject) 高度的片段会关闭该设置,比如跳上跳下。
注意:Animator.gravityWeight 由合并到姿势 (Bake Into Pose) 位置 Y 驱动。启用该设置时,gravityWeight = 1,禁用该设置时则 = 0。在状态之间转换时,gravityWeight 用于片段融合。
基于 (Based Upon):您可以按照与根变换旋转 (Root Transform Rotation) 类似的方式从原始方向 (Original) 或质心 (Mass Center)(身体 (Body))中进行选择。还有一个双脚 (Feet) 选项,非常便于 AnimationClip 更改高度(合并到姿势 (Bake Into Pose) 已禁用)。使用双脚 (Feet) 选项时,根变换位置 Y (Root Transform Position Y) 会为所有帧匹配最低的脚 Y。因此,融合点常常停留在双脚周围,以防止在融合或转换时出现浮动问题。
偏移 (Offset):可以按照与根变换旋转 (Root Transform Rotation) 类似的方式,使用偏移 (Offset) 设置手动调整 AnimationClip 高度。
根变换位置 (XZ)
再一次,该项使用根变换旋转 (Root Transform Rotation) 和根运动位置 (Root Motion Position) (Y) 中描述的相同概念。
合并到姿势 (Bake Into Pose) 将用于?空闲 (Idles)?,在这种情况下您希望将增量位置 (Position) (XZ) 强制改成 0。在多次评估之后,它会停止累计增量变化。它也可用于具有基于 (Based Upon)原始方向 (Original) 的关键帧片段,以强制更改美工设置的授权位置。
循环姿势
循环姿势 (Loop Pose)(就像混合树 (Blend Trees) 或转换 (Transitions) 中的姿势融合 (Pose Blending))在引用根变换 (Root Transform) 时出现。计算根变换 (Root Transform) 之后,姿势 (Pose) 变得与之相关。开始 (Start) 和停止 (Stop) 帧之间的相对姿势 (Pose) 差异将被计算出,并分布在 0-100% 的片段范围中。
通用根运动 (Generic Root Motion) 和循环姿势 (Loop Pose)
此项的工作原理本质上与类人根运动 (Humanoid Root Motion) 相同,但不使用身体变换 (Body Transform) 来计算/预计根变换 (Root Transform),而是使用根节点 (Root Node) 中的变换集。姿势 (Pose)(在根运动 (Root Motion) 骨骼下变换的所有骨骼)与根变换 (Root Transform) 相关。