Resource
How GAS works in practice. Abilities, effects, attributes, cues, execution calculations, prediction, and the 5.3+ component architecture.
The base class for all abilities. Subclass this to define what an ability does, what it costs, and when it can activate.
ActivateAbility()What the ability does. Override this in subclasses. Called after CanActivate passes.
CanActivateAbility()Const check — no side effects. Verifies cooldowns, costs, tags, and requirements.
CommitAbility()Commits resources (mana, stamina). Call this from ActivateAbility. Last chance to fail.
CommitAbilityCost()Commits only the cost portion. Use when you want to separate cost from cooldown.
CommitAbilityCooldown()Commits only the cooldown. Use when you want to separate cooldown from cost.
EndAbility()Called when the ability finishes, whether it succeeded or was cancelled.
CancelAbility()Called when the ability is forcibly interrupted from outside.
CheckCooldown()Returns whether the ability is off cooldown. No side effects.
CheckCost()Returns whether the owner can afford the ability cost. No side effects.
NonInstancedDeprecated since 5.5. Shared CDO, no per-instance state. Use InstancedPerActor instead.
InstancedPerActorOne instance per owning actor. Shared across activations. Recommended default.
InstancedPerExecutionNew instance each activation. Most flexible but higher memory cost.
LocalPredictedClient predicts activation, server confirms. Best for responsive gameplay.
LocalOnlyRuns only on the local machine that has control. No server involvement, no prediction.
ServerInitiatedClient requests, server decides. More authoritative, slightly more latency.
ServerOnlyRuns only on the server. Use for abilities that don't need client-side prediction.
The central component that manages abilities, effects, attributes, and tags on an actor. Every actor using GAS needs one.
InitAbilityActorInfo(Owner, Avatar)Initialize the ASC with the owning actor and avatar actor. Call once during setup.
GiveAbility(Spec)Grant an ability to this component. Returns a handle for later reference.
GiveAbilityAndActivateOnce(Spec)Grant and immediately activate. The ability is removed after it finishes.
TryActivateAbility(Handle)Attempt to activate an ability by its spec handle.
TryActivateAbilitiesByTag(Tags)Attempt to activate all abilities matching the given tags.
CancelAbility(Handle)Cancel a specific active ability.
CancelAbilities(WithTags, WithoutTags)Cancel active abilities matching tag filters.
CancelAllAbilities()Cancel every active ability on this component.
ApplyGameplayEffectToSelf(GE, Level, Context)Apply a gameplay effect to this component.
ApplyGameplayEffectToTarget(GE, Target, Level, Context)Apply a gameplay effect to another ASC.
RemoveActiveGameplayEffect(Handle)Remove an active effect by its handle. Pass StacksToRemove for partial removal.
RemoveActiveGameplayEffectBySourceEffect(GE, Source)Remove effects matching a class and source ASC.
GetSet<T>()Get an attribute set by type. Returns null if not found.
GetNumericAttribute(Attribute)Get the current value of an attribute.
GetNumericAttributeBase(Attribute)Get the base (permanent) value of an attribute.
SetNumericAttributeBase(Attribute, Value)Set the base value directly, bypassing the GE system.
HasMatchingGameplayTag(Tag)Returns true if the component has the exact tag or a parent of it.
HasAllMatchingGameplayTags(Tags)Returns true if the component has all of the specified tags.
HasAnyMatchingGameplayTags(Tags)Returns true if the component has any of the specified tags.
AddLooseGameplayTag(Tag)Add a tag directly, not through a gameplay effect.
RemoveLooseGameplayTag(Tag)Remove a directly-added tag.
Data-only asset that defines what happens when applied — damage, buffs, debuffs, stat changes. You don't subclass this; you configure it.
InstantApplies once and disappears. Damage hits, one-off heals, permanent stat changes.
HasDurationActive for N seconds, then expires. Timed buffs like +10 speed for 5 seconds.
InfiniteStays active until explicitly removed. Passives, equipment bonuses, persistent states.
Evaluation order: ((Base + AddBase) * MultiplyAdditive / DivideAdditive * MultiplyCompound) + AddFinal. Override replaces everything.
AddBaseAdd to base value before multipliers.
MultiplyAdditiveStack multipliers additively. Two +50% buffs = 1 + 0.5 + 0.5 = 2x.
DivideAdditiveStack divisors additively.
MultiplyCompoundCompound multipliers. Two 1.5x buffs = 1.5 * 1.5 = 2.25x.
AddFinalAdd to the final value after all multipliers.
OverrideReplace the entire value. Highest priority wins. Legacy — exists for serialization compatibility.
ScalableFloatFixed value that optionally scales with level via a curve table.
AttributeBasedDerived from a target attribute. (Attribute * Coefficient + Bonus).
CustomCalculationClassSubclass UGameplayModMagnitudeCalculation and implement CalculateBaseMagnitude.
SetByCallerValue set at runtime by the ability code. Look up by tag or name.
NoneEach application is independent. Multiple DoTs from different sources all tick separately.
AggregateBySourceStacks when the same source reapplies. Two warriors hitting the same target get separate stacks.
AggregateByTargetStacks on reapplication to the same target regardless of source.
Defines gameplay attributes (Health, Mana, Damage, etc.) as FGameplayAttributeData properties. Each attribute has a BaseValue (permanent) and CurrentValue (base + active modifiers).
PreGameplayEffectExecute(Data)Called before a GE modifies the base value. Return false to reject the modification.
PostGameplayEffectExecute(Data)Called after a GE modifies the base value. Use for reactions like triggering death when Health hits zero.
PreAttributeChange(Attribute, NewValue)Called before any attribute change. Can clamp NewValue.
PostAttributeChange(Attribute, OldValue, NewValue)Called after any attribute change. React to changes here.
Mark attribute properties with ReplicatedUsing and call GAMEPLAYATTRIBUTE_REPNOTIFY in the OnRep callback to sync attribute changes across the network.
Asynchronous operations that run inside an ability — wait for input, play an animation, wait for an event. They broadcast delegates when they complete.
PlayMontageAndWaitPlay an animation montage. Broadcasts OnCompleted, OnBlendedIn, OnBlendOut, OnInterrupted, OnCancelled.
WaitTargetDataSpawn a target actor and wait for the player to confirm targeting. Broadcasts ValidData, Cancelled.
WaitGameplayEventWait for a gameplay event with a specific tag. Broadcasts EventReceived.
WaitDelayWait for N seconds. Broadcasts TimerFinished.
WaitInputPress / WaitInputReleaseWait for the ability's bound input to be pressed or released.
WaitConfirm / WaitCancelWait for the ability system's generic confirm or cancel input.
WaitAttributeChangeWait for an attribute to reach a threshold value. Broadcasts OnChange.
WaitGameplayEffectApplied_Self / _TargetWait for a gameplay effect to be applied to self or a target.
WaitGameplayTagWait for a specific tag to be added or removed from the owner.
SpawnActorSpawn an actor with ExposeOnSpawn support. Broadcasts Success, DidNotSpawn.
NetworkSyncPointWait for server confirmation before proceeding. Used for prediction synchronization.
ApplyRootMotion_*Apply movement during ability. Variants for jumps, constant forces, and curves.
Decouple visual and audio feedback from gameplay logic. Triggered by gameplay effect tags or manually from abilities. Run on clients only.
ExecutedOne-shot cue. Damage hit, impact effect, pickup flash.
OnActiveStart a persistent cue. Buff begins, shield activates.
WhileActivePersistent cue ticking. Looping sound, ongoing particle effect.
RemovedEnd a persistent cue. Buff expires, shield deactivates.
GAS uses gameplay tags extensively for ability requirements, blocking, cancellation, and effect filtering.
AbilityTagsTags this ability has. Used for identification and queries.
ActivationOwnedTagsTags applied to the owner while the ability is active. Replicated.
ActivationRequiredTagsOwner must have all of these tags for the ability to activate.
ActivationBlockedTagsOwner must have none of these tags for the ability to activate.
CancelAbilitiesWithTagWhen this ability activates, cancel other active abilities with matching tags.
BlockAbilitiesWithTagWhile this ability is active, block other abilities with matching tags from activating.
UTargetTagsGameplayEffectComponentTags granted to the target while the effect is active. Replaces the deprecated InheritableOwnedTagsContainer (5.3+).
UAssetTagsGameplayEffectComponentMeta tags on the effect itself for identification and filtering. Replaces InheritableGameplayEffectTags (5.3+).
UImmunityGameplayEffectComponentBlocks the effect if the target has matching immunity tags. Replaces GrantedApplicationImmunityTags (5.3+).
UTargetTagRequirementsGameplayEffectComponentTags the target must have (or must not have) for the effect to apply. Replaces ApplicationTagRequirements (5.3+).
URemoveOtherGameplayEffectComponentRemoves other active effects that match specified tags when this effect is applied (5.3+).
Runtime data for a granted ability — its level, input binding, activation state, and source.
HandleUnique FGameplayAbilitySpecHandle. Use this to reference the ability later.
AbilityPointer to the ability class (CDO or instance depending on instancing policy).
LevelAbility level. Affects scalable float curves and damage scaling.
InputIDInput binding index. INDEX_NONE if not bound to input.
SourceObjectWhat granted this ability — an item, a talent, a pickup.
ActiveCountHow many instances are currently active.
InputPressedWhether the bound input is currently held down.
RemoveAfterActivationAbility is removed from the ASC after this activation completes.
GetDynamicSpecSourceTags()Source tags for GEs created by this spec. Replaces the deprecated DynamicAbilityTags field (5.5+).
UGameplayEffectExecutionCalculation runs custom logic when a gameplay effect executes. Use it for complex calculations that read multiple attributes from source and target — damage formulas, scaling based on distance, or conditional modifiers.
Execute(ExecutionParams, OutExecutionOutput)Override this. Read captured attributes from ExecutionParams, write modifier results to OutExecutionOutput.
AttemptCalculateCapturedAttributeMagnitude(CaptureDef, EvalParams, OutMagnitude)Read a captured attribute's current value (base + modifiers). Returns false if capture failed.
AttemptCalculateCapturedAttributeBaseValue(CaptureDef, OutBaseValue)Read only the base value of a captured attribute, ignoring active modifiers.
DECLARE_ATTRIBUTE_CAPTUREDEF(PropertyName)Macro to declare a capture definition in your header. Creates PropertyName##Property and PropertyName##Def members.
DEFINE_ATTRIBUTE_CAPTUREDEF(Set, Prop, Source, bSnapshot)Macro to initialize a capture definition in your constructor. Source is Source or Target, bSnapshot freezes the value at spec creation.
UGameplayModMagnitudeCalculation computes a custom base magnitude for a modifier. Simpler than execution calculations — you return a single float that the modifier uses as its value.
CalculateBaseMagnitude(Spec)Override this. Return the calculated magnitude. The Spec gives you access to source/target tags and SetByCaller values.
K2_GetCapturedAttributeMagnitude(Spec, Attribute, SourceTags, TargetTags)Blueprint-accessible helper to read a captured attribute value with tag filtering.
GetSetByCallerMagnitudeByTag(Spec, Tag)Read a SetByCaller value from the spec using a gameplay tag.
Gameplay effects use a component architecture since UE 5.3. Each component defines a specific behavior — granting abilities, blocking tags, applying additional effects, or checking requirements. Add components to a GE in the editor to configure its behavior.
UAbilitiesGameplayEffectComponentGrants gameplay abilities to the target while the effect is active. Configurable level and input binding.
UAdditionalEffectsGameplayEffectComponentApplies additional GEs on application, on normal completion, on premature removal, or always.
UAssetTagsGameplayEffectComponentTags that the GE itself has for identification and queries. Not transferred to actors.
UBlockAbilityTagsGameplayEffectComponentBlocks activation of abilities with matching tags while the effect is active.
UCancelAbilityTagsGameplayEffectComponentCancels active abilities with matching tags on application or execution.
UChanceToApplyGameplayEffectComponentProbabilistic application. Uses FScalableFloat for dynamic chance calculation.
UCustomCanApplyGameplayEffectComponentCustom application requirements via UGameplayEffectCustomApplicationRequirement subclasses.
UImmunityGameplayEffectComponentBlocks application of other GEs matching a FGameplayEffectQuery. Requires duration.
URemoveOtherGameplayEffectComponentRemoves active GEs matching a FGameplayEffectQuery when this effect is applied.
UTargetTagRequirementsGameplayEffectComponentTag requirements on the target for application, continuation, and removal.
UTargetTagsGameplayEffectComponentGrants tags to the target actor while the effect is active.
Target data structures carry targeting information from the ability to effect application. Wrap them in FGameplayAbilityTargetDataHandle for network serialization.
FGameplayAbilityTargetData_SingleTargetHitSingle hit result from a line trace or projectile. Contains an FHitResult.
FGameplayAbilityTargetData_ActorArrayMultiple actor targets with a source location. Use for AOE or radial attacks.
FGameplayAbilityTargetData_LocationInfoLocation-based targeting with source and target transforms. Supports literal, actor, and socket transforms.
FGameplayEffectContext carries metadata about who caused an effect and how. Passed through the entire effect pipeline. Subclass it for game-specific data like critical hit flags or damage type info.
GetInstigator()The actor that initiated the effect chain (the character who fired).
GetEffectCauser()The physical actor that caused the effect (the projectile that hit).
GetAbility()The ability CDO that created this context.
GetAbilityLevel()Level of the ability when the context was created.
GetSourceObject()Abstract source — an item, weapon, or talent that triggered the chain.
GetHitResult()FHitResult from the targeting system, if available.
GetOrigin()World location where the effect originated.
GetInstigatorAbilitySystemComponent()The source ASC, cached for performance.
FGameplayAbilityActorInfo caches actor references for the ability system. Set up once via InitAbilityActorInfo and accessed from any ability.
OwnerActorThe actor that owns the ability system. Always valid.
AvatarActorThe physical actor executing abilities. May differ from owner (e.g., player state owns ASC, pawn is the avatar).
PlayerControllerCached controller reference. Null for AI-controlled actors.
AbilitySystemComponentThe ASC itself. Always valid after initialization.
SkeletalMeshComponentCached mesh for montage playback. Null if no skeletal mesh.
AnimInstanceCached anim instance for animation-driven abilities.
MovementComponentCached movement component for movement abilities.
IsLocallyControlled()True only on the owning client. Use for client-only logic.
IsNetAuthority()True on the server. Use for authority-only logic.
GAS uses FPredictionKey to synchronize client-side prediction with server authority. The client creates a key when activating an ability, and the server either confirms or rejects it.
TryActivateAbility, which generates an FPredictionKey.ActivateAbility (applied GEs, spawned cues) are tagged with this key.FReplicatedPredictionKeyMap.FPredictionKey::CreateNewPredictionKey(ASC)Generate a new prediction key for client-side prediction.
FScopedPredictionWindow(ASC, Key)Create a prediction window on the server when receiving a client RPC. Side effects inside this scope use the key.
IsValidKey()Returns true if the key has a valid ID (Current > 0).
IsLocalClientKey()True if generated locally on a client.
NewRejectedDelegate()Register a callback that fires if the server rejects this prediction.
NewCaughtUpDelegate()Register a callback that fires when replicated state catches up to this prediction.