Appearance
Learning GAS
Motion uses the Gameplay Ability System (GAS) for movement state, attributes, GameplayEffects, and multiplayer replication. This page explains the concepts Motion relies on and how they fit together.
Why Motion uses GAS
GAS gives Motion a standard Unreal way to represent state and attribute changes:
- GameplayTags describe states such as sprinting, crouching, jumping, and stamina depletion.
- Attributes store values such as walk speed, jump velocity, stamina, and stamina regeneration rate.
- GameplayEffects modify attributes and grant or block tags.
- The AbilitySystemComponent replicates relevant state between server and clients.
The core pieces
AbilitySystemComponent
The ASC manages active effects, owned tags, attributes, and replication. Motion discovers it through UMotionAbilitySystemHelper, which checks IAbilitySystemInterface on the supplied actor and ASC-component fallbacks on that actor or its PlayerState. For a local PlayerController fallback, the helper searches the controller's PlayerState.
Attributes
Attributes are numeric values. Motion's default AttributeSet provides WalkSpeed, JumpVelocity, Stamina, MaxStamina, StaminaRegenRate, and StaminaDrainRate. Components discover the attributes they use by name; the current MotionJumpComponent derives its jump velocity from its profile rather than requiring the JumpVelocity attribute.
Attributes have a base value and a current value. Instant GameplayEffects execute a one-time base-value change, while duration and infinite modifiers contribute to the current value. Motion can sync relevant attributes back to CharacterMovementComponent properties.
GameplayEffects
GameplayEffects are the server-owned way to change replicated Motion state. Motion uses separate effects for the sprint-speed modifier and the active Motion.State.Sprinting tag; a stamina drain effect can periodically reduce Stamina.
Motion also uses loose tags for predicted input intent and locally derived presentation state. These tags can support immediate local animation or gameplay queries, but components drive camera feedback directly; server-applied GameplayEffects remain the authority for replicated movement state.
GameplayTags
GameplayTags describe state in a way that other systems can query. Motion uses tags for movement state, input intent, camera state, and SetByCaller magnitudes.
Parent tags allow broader checks. For example, a system can query a specific Motion.State.Sprinting tag or reason about the wider Motion.State family.
Intent tags and active state tags are different contracts. Motion.State.WantsToSprint says the player requested sprinting; Motion.State.Sprinting says Motion considers the character actively sprinting. Animation, camera, and held-pose selection should generally read active state tags.
How Motion uses GAS
Motion uses components for movement behavior and GAS for state and attributes:
This approach keeps Motion compatible with regular Unreal character classes while still using GAS replication for networked projects.
The local visual path still reads the same tag surface. On the owning client, movement components may predict input intent with WantsTo* loose tags, and components can drive local feedback directly. Authoritative active movement tags are confirmed by server-applied GameplayEffects.
Initialization flow
Why this matters
The GAS model lets Motion avoid a required character base class. Your project can keep its own character, PlayerState, and AttributeSet as long as Motion can discover the ASC and the attributes that a feature needs.
Feature components perform their own attribute binding, synchronization, and effect application after the shared ASC setup is ready.
This keeps server ownership clear: clients can predict input intent and local presentation, but authoritative GameplayEffects, replicated tags, and replicated attributes originate from the server-owned ASC.
Next steps
Continue with the GAS page that matches what you are trying to do.