Gameplay Cues Deep Dive¶
Gameplay Cues are the cosmetic layer of GAS. They exist for one purpose: turning gameplay state changes into audiovisual feedback -- particles, sounds, screen shakes, camera effects, UI popups. They are the reason your fireball doesn't just subtract numbers silently.
If you haven't already, read the Gameplay Cues Overview first. This section assumes you understand the basic concepts -- Execute vs Add/Remove, tag routing, local vs replicated -- and goes much deeper.
The Golden Rule (One More Time)
No gameplay logic in cues. Your game must function identically with every cue disabled. If you're tempted to put a health check, a tag grant, or a damage calculation inside a cue, stop. That belongs in a Gameplay Effect or Ability.
What's in This Section¶
Cue Notify Types¶
UE 5.7 ships six cue notify classes, not four. This page covers all of them in depth -- when to use each, their lifecycle events, key properties, and practical examples. Includes a decision matrix to pick the right one fast.
Cue Parameters¶
Every cue receives an FGameplayCueParameters struct with context about what triggered it. This page breaks down every field, explains how to pass custom data via a custom FGameplayEffectContext, and covers IGameplayCueInterface for handling cues directly on actors.
Cue Manager¶
The UGameplayCueManager is the routing backbone. It decides which cue notify to invoke, handles async loading, manages the actor recycle pool, and supports batching. Learn how to configure scan paths, preload assets, use the GameplayCueTranslator, and override the manager for custom routing.
AnimNotify and Sequencer¶
Cues can be triggered from Animation Montages and Level Sequences, not just from Effects and Abilities. This page covers UAnimNotify_GameplayCue, UAnimNotify_GameplayCueState, and the Sequencer gameplay cue track/sections.
Architecture at a Glance¶
Here's how a cue flows through the system:
Gameplay Effect applied (or manual call)
│
▼
UAbilitySystemComponent
│ Routes based on replication mode
▼
UGameplayCueManager::HandleGameplayCue()
│
├─ ShouldSuppressGameplayCues() → can reject
├─ TranslateGameplayCue() → tag remapping
├─ IGameplayCueInterface check → actor-level handling
└─ RouteGameplayCue() → finds and invokes the right notify
│
▼
GameplayCueSet lookup by tag
│
▼
Cue Notify class (Static, Burst, Actor, etc.)
│
▼
Your Blueprint/C++ event handlers fire
The key insight: you rarely interact with the manager directly. You set a tag on your effect, create a cue notify with a matching tag, and the system connects them. The deep dive pages below are for when you need to customize that pipeline.
Key Source Files¶
| File | What's Inside |
|---|---|
GameplayCueNotify_Static.h |
UGameplayCueNotify_Static -- non-instanced base |
GameplayCueNotify_Burst.h |
UGameplayCueNotify_Burst -- one-shot with spawn config |
GameplayCueNotify_BurstLatent.h |
AGameplayCueNotify_BurstLatent -- one-shot with latent support |
GameplayCueNotify_Actor.h |
AGameplayCueNotify_Actor -- stateful, recycled |
GameplayCueNotify_Looping.h |
AGameplayCueNotify_Looping -- duration-based loops |
GameplayCueNotify_HitImpact.h |
UGameplayCueNotify_HitImpact -- legacy, deprecated |
GameplayCueManager.h |
UGameplayCueManager -- routing, loading, recycling |
GameplayCueInterface.h |
IGameplayCueInterface -- actor-level cue handling |
GameplayCueNotifyTypes.h |
Spawn conditions, placement, burst/looping effect structs |
GameplayEffectTypes.h |
FGameplayCueParameters definition |
AnimNotify_GameplayCue.h |
Anim notify classes |
Sequencer/MovieSceneGameplayCueTrack.h |
Sequencer track |
Sequencer/MovieSceneGameplayCueSections.h |
Sequencer sections and key struct |