总览
URootMotionModifier 是“怎么改 root motion”的策略对象。Notify Window 只是告诉系统什么时候改,Warp Target 只是告诉系统改向哪里,真正的算法在 Modifier 里。
Modifier 总览
| Modifier | 状态 | 适合场景 | 建议 |
|---|---|---|---|
URootMotionModifier_SkewWarp |
常用 | 翻越、攻击踏步、交互对齐 | 默认首选 |
URootMotionModifier_Scale |
简单稳定 | 只按比例缩放平移 | 工具或简单修正 |
URootMotionModifier_PrecomputedWarp |
Experimental | 固定目标、预先算完整路径 | 谨慎评估 |
URootMotionModifier_AdjustmentBlendWarp |
隐藏/未面向生产 | IK Bone 轨迹修正 | 不建议普通项目直接用 |
URootMotionModifier_Blueprintable |
Experimental | 原型、自定义处理 | 原型可以,生产慎用 |
Skew Warp
Skew Warp 是最常见选择。它根据当前 Transform、这一帧 Delta、窗口总位移和目标位置,把窗口内每帧平移重新分配到目标上。UE5.8 里还提供 MaxSpeedClampRatio,用于限制最大 warp 速度相对原动画速度的倍数,防止远距离目标把角色拉得过快。
常用配置是:翻越和近战都用 Skew;先开 Translation 和 Rotation;Z 轴是否忽略看动作类型,平地攻击通常忽略 Z,跳跃/攀爬可能不能忽略。
Scale
Scale 只按向量缩放 root motion 平移。它不理解目标点,不会自己算对齐。适合简单的“这段 root motion 放大 1.2 倍”或工具验证,不适合复杂目标对齐。
Precomputed Warp
Precomputed Warp 在第一帧计算到目标的完整路径,后续按预计算轨迹执行。源码 Tooltip 说明它只适合静止目标。它有 Translation/Rotation 曲线、AlignOffset、UpdateMode、Steering 等配置。移动目标、复杂碰撞或网络预测里要非常谨慎。
Adjustment Blend Warp
AdjustmentBlendWarp 带 IK Bones 和轨迹预计算,代码里标注隐藏下拉,注释也说明还不适合生产 UI 暴露。普通项目不要把它当默认方案。你更应该先用 Skew Warp + IK/Control Rig 解决手脚末端。
Blueprintable Modifier
URootMotionModifier_Blueprintable 暴露 BP_ProcessRootMotion,可以在蓝图里返回修改后的 FTransform。它适合做实验,比如只改某个轴、做特殊曲线。但生产项目要注意蓝图每帧执行成本、可测试性和多人一致性。
使用案例:近战吸附
攻击动作优先用 Skew Warp。如果目标距离太近或太远,不要无限拉伸,而是在 Ability/BT 里限制可启动距离:例如 80cm 到 180cm。超出范围先 MoveTo,进入范围再播放 Montage。Modifier 负责小范围修正,玩法层负责大范围接近。
常见坑
- 把 Scale 当目标对齐,它只缩放,不找目标。
- 用 Precomputed Warp 追移动目标,目标一变就不对。
- 用 Blueprintable 每帧做复杂查询,性能和网络一致性变差。
- 看到 Experimental 就直接上生产,没有回退方案。
- 不限制目标距离,让 Skew Warp 承担导航职责。
源码依据
URootMotionModifier 定义状态、窗口时间、动画、权重、PlayRate、StartTransform 和 ProcessRootMotion。URootMotionModifier_Warp 增加 WarpTargetName、WarpPointAnimProvider、Translation/Rotation 配置和目标缓存。URootMotionModifier_SkewWarp 覆写 ProcessRootMotion,并提供 WarpTranslation。PrecomputedWarp、AdjustmentBlendWarp 和 Blueprintable 都在源码里标出不同程度的实验或隐藏属性。
源码路径索引
MotionWarping/Public/RootMotionModifier.hMotionWarping/Public/RootMotionModifier_SkewWarp.hMotionWarping/Public/RootMotionModifier_PrecomputedWarp.hMotionWarping/Public/RootMotionModifier_AdjustmentBlendWarp.h