GAS Gameplay Cue Notify 详解
November 5, 2025About 3 min
GAS Gameplay Cue Notify 详解
Gameplay Cue 是 GAS 里专门处理纯表现的部分——粒子、音效、震动这类不影响玩法的视听反馈。它和玩法逻辑解耦:玩法只负责"该播个什么 Cue 了",具体播什么、怎么播交给 Cue Notify。
连接二者的是 GameplayTag。Cue 通过标签和继承自 GameplayCueNotify 的处理器全局映射,相同标签就能触发对应的视听逻辑。

两种 Notify 类型
| Class | 常用事件 | 适用场景 |
|---|---|---|
| UGameplayCueNotify_Static | Execute | 一次性触发,比如打击命中 |
| AGameplayCueNotify_Actor | Add / Remove | 实例化、可随时间操作直到被删除,适合循环粒子/音效 |
两个关键注意点:
UGameplayCueNotify_Static跑在 CDO 上,蓝图里的值都是只读的。如果你想用 Niagara 并持有UNiagaraComponent引用,得用AGameplayCueNotify_Actor。- 用
AGameplayCueNotify_Actor时记得勾 Auto Destroy on Remove,否则后续的 Add 可能不正常工作。
两种触发方式
- GE 配置触发——在 GE 里指定 GameplayTag,系统按标签映射自动调对应 Cue。
- GA 手动触发——代码里调 ASC 的
ExecuteGameplayCueOnOwner/AddGameplayCueToOwner主动触发。
生成的 Cue 实例会缓存在 ASC 的 FGameplayCueObjectLibrary 里复用,减少后续触发延迟。
与 Ability 的关联
| 触发函数 | 描述 | 生命周期 | 典型用途 |
|---|---|---|---|
| AddGameplayCueToOwner | 给 Owner 加一个持续型 Cue(OnActive + Removed) | 绑 Ability 生命周期 | 持续 Buff、护盾、燃烧 |
| ExecuteGameplayCueOnOwner | 在 Owner 上触发一次瞬时 Cue(Executed) | 不绑生命周期 | 爆炸、击中、一次性音效 |
底层分别走 UAbilitySystemComponent::AddGameplayCue 和 UAbilitySystemComponent::ExecuteGameplayCue。

生命周期事件
两类 Notify 本质上都是在追踪同一个 Cue 的生命周期,系统按 Cue 当前状态(激活/持续/移除)自动回调对应事件,由 Notify 实现具体反馈。区别只是事件命名和是否实例化。
UGameplayCueNotify_Static

重写 HandleGameplayCue 可统一处理下列所有事件:
| 事件 | 触发时机 | 干什么 |
|---|---|---|
| OnActive | 持续型 Cue 首次激活(客户端观察到) | 初始化持续效果,如开始播循环粒子/音效 |
| WhileActive | 持续期间每帧,延迟加入的客户端也收 | 持续更新,如每帧调特效参数、跟踪位置 |
| OnExecute | Cue 被执行时 | 瞬时或周期触发,如一次性爆炸 |
| Removed | 持续型 Cue 被移除时 | 清理:停粒子、销毁组件 |
AGameplayCueNotify_Actor

同样能重写 HandleGameplayCue,事件语义和 Static 对应,只是换了名字:
| 事件 | 触发时机 | 干什么 |
|---|---|---|
| OnBurst(OnActive) | 持续型 Cue 初次激活 | 启动持续特效,如循环粒子 |
| OnBecomeRelevant(WhileActive) | 持续期间每帧,延迟加入也触发 | 实时更新特效参数/动画/位置 |
| OnExecute | Cue 被执行时 | 瞬时爆发或周期执行 |
| OnCeaseRelevant(OnRemove) | 持续型 Cue 被移除时 | 清理资源、停特效、销毁对象 |
怎么选
两者的差异就两条,照着选不会错:
- 是否创建实例——Static 不创建实例,所有逻辑跑在 CDO 上;Actor 会生成独立 Actor 实例来管特效生命周期。
- 是否保存状态——Static 不能跨事件保存成员状态,适合无状态/瞬发;Actor 支持成员变量,能保存循环粒子组件这类持续引用。
落到触发方式:
- 持续型、需要生命周期管理的 →
AddGameplayCueToOwner,绑 Ability Owner 生命周期,自动触发生命期事件,资源好管。 - 一次性、瞬发的 →
ExecuteGameplayCueOnOwner,触发单次 Executed,快速反馈,不绑生命周期。