UE5.8 Motion Warping 专题系列

UE5.8 Motion Warping 专题(五):Notify Window 怎么切,窗口决定动作自然不自然

讲清 UAnimNotifyState_MotionWarping 在动画资产里的职责,如何选择窗口开始/结束、Montage 内动画搜索、多个窗口、多目标分段和常见资产验收方法。

总览

Motion Warping 的窗口是动画资产和 gameplay 的交界线。窗口告诉系统:从这个时间到那个时间,这段 root motion 可以被重新分配。窗口切错了,代码再正确也会滑、跳、扭、瞬移。

UE5.8 Motion Warping 专题(五):Notify Window 怎么切,窗口决定动作自然不自然 配图
窗口不是越大越好,也不是越短越精准,它应该覆盖角色主动接近目标的那段 root motion。

窗口选择原则

动作 推荐窗口 避免覆盖
近战踏步 起手踏步到命中前 命中后收招
翻越 起跳/跨越主体段 预备蹲下和落地恢复
攀爬 抓边到身体上平台 纯手部 IK 段
处决 两人接近和锁定段 伤害定格和镜头表现段
开门 站位调整段 手部贴把手段

窗口应该覆盖“角色主动靠近目标”的运动,而不是所有看起来相关的帧。

多窗口和多目标

复杂动画可以有多个 UAnimNotifyState_MotionWarping。例如攀爬:

  1. Climb.HandTarget:让角色靠近边缘,窗口较短。
  2. Climb.LandingTarget:让角色身体最终落到平台,窗口覆盖上爬主体段。

这比一个巨大窗口自然,因为不同阶段对齐的目标不同。Contextual Animation 源码里也会根据 Warp Target 名字寻找 Warp Section,说明“按目标分段”是引擎内部也在使用的模式。

Montage 内动画搜索

UMotionWarpingComponentbSearchForWindowsInAnimsWithinMontages。如果你的 Notify 加在 Montage 自身轨道上,默认能扫到;如果 Notify 加在 Montage 引用的 AnimSequence 里,需要考虑这个开关。项目里最好统一规范,避免有的动画把 Notify 放 Sequence,有的放 Montage。

资产验收步骤

  1. 在动画编辑器里显示 root motion 轨迹。
  2. 给窗口开始帧、结束帧截图或打标记。
  3. 用三种距离测试:略近、标准、略远。
  4. 看窗口内速度是否突然变大。
  5. 看窗口外是否还在被拉。
  6. 确认 WarpTargetName 和项目常量一致。

使用案例:处决动画

处决通常由攻击者和受害者两个动画组成。攻击者对齐到受害者相对位置,受害者也可能要对齐到攻击者。建议先只让攻击者 Motion Warping,受害者用 Contextual Animation 或附着/同步处理。两边都 Warping 时,目标互相跟随容易放大误差。

常见坑

  • 窗口从动画第一帧开始,角色预备动作也被拉变形。
  • 窗口到最后一帧结束,收招阶段还在补位移。
  • 多个窗口使用同名目标但语义不同。
  • 动画师改了时间线,Notify 没跟着重新验收。
  • Montage Blend In/Blend Out 太长,窗口里实际动画权重不足。

源码依据

UAnimNotifyState_MotionWarping 只保存一个 RootMotionModifier 模板,并把 OnWarpBeginOnWarpUpdateOnWarpEnd 暴露给蓝图。组件扫描 Notify 时会计算 StartTime/EndTime,进入窗口后 OnBecomeRelevant 创建 Modifier。UMotionWarpingUtilities 还提供 GetMotionWarpingWindowsFromAnimation 和按 Warp Target 名字筛窗口的函数,便于工具化检查。

源码路径索引

  • MotionWarping/Public/AnimNotifyState_MotionWarping.h
  • MotionWarping/Public/MotionWarpingComponent.h
  • MotionWarping/Private/MotionWarpingComponent.cpp
  • Experimental/Animation/ContextualAnimation/Private/ContextualAnimTypes.cpp