Gameplay Ability
- Derived from UGameplayAbility; defines what an ability does, cost, conditions. Can be instanced objects running asynchronously; replicate, run on client/server incl. client-side prediction, sync variables, RPCs.
- Granting: GiveAbility (FGameplayAbilitySpec → FGameplayAbilitySpecHandle). Only the server can give or revoke Abilities. GiveAbilityAndActivateOnce. Revoking: ClearAbility, SetRemoveAbilityOnEnd, ClearAllAbilities.
- Lifecycle: CanActivateAbility (e.g. gray out UI); CallActivateAbility (no check); override ActivateAbility / Activate Ability event. Gameplay Abilities do not carry out their primary work in a "tick" function ... they launch Ability Tasks ... handle output via Delegates or output pins. CommitAbility applies cost and cooldowns. CancelAbility (CanBeCanceled may reject; broadcasts On Gameplay Ability Cancelled). TryActivateAbility = CanActivate + CallActivate, typical way. EndAbility must be called unless canceled; failing → system thinks still running, blocking future use (Drink Health Potion example: can't sprint, climb ladders...).
- Tags: Cancel Abilities With Tag; Block Abilities With Tag; Activation Owned Tags; Activation Required Tags; Activation Blocked Tags; Target Required Tags; Target Blocked Tags.
- Replication Policy Yes/No controls replicating instances, state, Gameplay Events (not the same as replicating activation/ending).
- Net Execution Policy: Local Predicted (runs locally immediately, server has final word); Local Only (no replication to server; runs on server only if host/listen or single-player); Server Initiated (more accurate but delay); Server Only (not replicated to clients).
- Instancing Policy: Instanced per Execution (new object each run; Blueprint graphs and member vars freely; for infrequent e.g. MOBA Ultimate 60–90 s cooldown, ~10 characters; bad for hundreds of minions' basic attacks). Instanced per Actor (one instance per actor reused; must clean member vars; ideal for replication; scales in big battles). Non-Instanced (uses CDO; most efficient; must be entirely C++; no member changes, no delegate binding, no replicated vars or RPCs; for frequent abilities used by many, e.g. RTS/MOBA basic attack).
- OnAvatarSet, OnGiveAbility, ShouldAbilityRespondToEvent, OnRemoveAbility, CanActivateAbility may be called without activation: on instance for InstancedPerActor; on CDO for Non-Instanced and InstancedPerExecution.
- Gameplay Events: Send Gameplay Event To Actor (IAbilitySystemInterface) or Handle Gameplay Event on ASC; FGameplayEventData (polymorphic ContextHandle). Triggered abilities use Activate Ability From Event, not Activate Ability.