Skip to content

Gameplay Abilities Deep Dive

Gameplay Abilities are the verbs of GAS. They represent discrete actions an actor can perform: casting a fireball, dodging, jumping, entering a rage state, channeling a heal. Every ability goes through a well-defined lifecycle of activation, execution, and termination — and the system provides a rich set of tools for controlling each step.

If you are looking for a high-level overview, start with the Core Concepts: Gameplay Abilities Overview first, then come back here for the deep dive.

The Ability Lifecycle (Quick Recap)

At its core, every ability flows through the same phases:

CanActivateAbility()  →  ActivateAbility()  →  CommitAbility()  →  EndAbility()
       ↑                                             ↑
  Tag checks                                  Cost + Cooldown
  Cooldown check                              applied here
  Cost check
  Net role check

Between ActivateAbility and EndAbility, your ability is alive and running. It can spawn Ability Tasks to do asynchronous work, request targeting data, play montages, apply Gameplay Effects, and fire Gameplay Cues. The ability is not complete until EndAbility is called — and forgetting to call it is one of the most common bugs new GAS developers run into.

We cover the lifecycle in full detail on the Lifecycle and Activation page.

Decision Tree: Where Should I Go?

Not sure which page answers your question? Start here.

"I want to..."

  • ...understand how abilities are activated, committed, and endedLifecycle and Activation
  • ...figure out which instancing policy to useInstancing Policy
  • ...do async work inside my ability (wait for events, play montages, etc.)Ability Tasks
  • ...listen for GAS events from a UI widget or AI controllerAsync Ability Tasks
  • ...bind abilities to player input (Enhanced Input)Input Binding
  • ...grant a set of abilities when a character spawns or equips somethingAbility Sets
  • ...implement interactive targeting (aim at the ground, select actors, etc.)Targeting
  • ...see what the built-in example abilities look likeBuilt-in Abilities

"I have a problem with..."

  • ...my ability never ending / leaking — Check the EndAbility section and make sure every code path calls it.
  • ...tasks crashing when the ability ends — Check your Instancing Policy — you may be using NonInstanced with tasks (don't do that).
  • ...abilities not activating — Walk through the full activation check sequence to see which check is failing. Use ShowDebug AbilitySystem to inspect tags.
  • ...input not working with abilities — See Input Binding for the Enhanced Input integration patterns.

Suggested Reading Order

If you are working through this section for the first time, this order builds concepts progressively:

  1. Lifecycle and Activation — the foundation, how abilities live and die
  2. Instancing Policy — how abilities are allocated in memory (affects everything else)
  3. Ability Tasks — the async building blocks for ability logic
  4. Async Ability Tasks — the newer alternative for non-ability contexts
  5. Input Binding — connecting player input to ability activation
  6. Ability Sets — organizing and granting groups of abilities
  7. Targeting — the full targeting subsystem
  8. Built-in Abilities — learning from Epic's examples

Already comfortable with GAS?

If you have shipped a project with GAS before and just need to look something up, jump straight to whatever page interests you. Each page is designed to stand on its own.

Key Source Files

For engine spelunkers, the relevant headers live under Engine/Plugins/Runtime/GameplayAbilities/Source/GameplayAbilities/Public/:

File What It Contains
Abilities/GameplayAbility.h UGameplayAbility — the full ability class with lifecycle, commit, cancel, tags, cues
GameplayAbilitySpec.h FGameplayAbilitySpec, FGameplayAbilityActivationInfo, FGameplayAbilitySpecDef
Abilities/GameplayAbilityTypes.h FGameplayAbilityActorInfo, instancing/net execution/trigger enums
Abilities/Tasks/AbilityTask.h UAbilityTask base class
Abilities/Tasks/AbilityTask_*.h All 27+ built-in ability tasks
Abilities/Async/AbilityAsync.h UAbilityAsync base class for async tasks
Abilities/Async/AbilityAsync_*.h All 6 async ability task types
Abilities/GameplayAbilityTargetActor*.h Target actor classes for interactive targeting
Abilities/GameplayAbilityTargetTypes.h FGameplayAbilityTargetData and its handle
Abilities/GameplayAbilityTargetDataFilter.h FGameplayTargetDataFilter
Abilities/GameplayAbilityWorldReticle*.h World reticle actors for targeting visualization
GameplayAbilitySet.h UGameplayAbilitySet data asset
Abilities/GameplayAbility_CharacterJump.h Built-in jump ability example
Abilities/GameplayAbility_Montage.h Built-in montage ability example