GAS 与动画系统对接
三层对接点
| 层 | 做什么 | 工具 |
|---|---|---|
| 流程层 | 播放蒙太奇、等播放完成 | PlayMontageAndWait |
| 时机层 | 动画播到关键帧 → 通知 GA | AnimNotifyState_PlayGameplayEvent |
| 表现层 | 属性变化 → 驱动动画状态 | 状态机标签(State.*)→ 动画蓝图 |
时机层:蒙太奇 Notify 三种用法
- 只在蓝图里用:Notify 名字 → 动画蓝图里
AnimNotify_<名字>事件(适合纯表现); - GameplayEvent:Notify 发事件标签 → GA 接(推荐,规则结算走这条);
- 自定义 NotifyState:复杂需求(如"该帧段内每一帧伤害"可用自定义 NotifyState 持续触发事件)。
表现层:让动画状态受 GAS Tag 控制
动画蓝图的"状态机切换"用 GAS 标签驱动:
动画蓝图 Event Blueprint Update Animation
→ GetAbilitySystemComponent → HasMatchingGameplayTag("State.Stunned")
→ 变量 bStunned → 状态机切换到"眩晕"状态
死亡、眩晕、移动 … 所有"规则状态"由 GAS 管理,动画层只读标签。这与第 1 本"规则在上、表现在下"是一致的。
常见坑:Root Motion 与 GA
播带 Root Motion 的蒙太奇时,被范围内的微小移动打断/取消 AbilityTask 会造成"角色卡住"。处理:
- 用 PlayMontageAndWait 的取消时确保蒙太奇也停(框架处理);
- Root Motion 与位移技能用 AbilityTask_ApplyRootMotion*(引擎自带),更可靠。
本章小结
- 三层对接:Task 播流程、Notify 定时机、标签驱动动画状态。
- 规则状态(眩晕/死亡)由 GAS 标签唯一维护,动画蓝图只读。
- Root Motion 位移优先用框架 Task,少手搓。
