Skip to content

Feature Overview

Motion is a component-based first-person character controller for Unreal Engine. It is built so you can add only the movement, camera, animation, sound, and GAS pieces your character needs.

The plugin is organized around a few core ideas:

  • Motion works with any ACharacter subclass instead of requiring a custom character inheritance chain.
  • Versioned component profiles hold Motion-owned defaults, while components own runtime state.
  • Movement state is represented through GameplayEffects, GameplayTags, and replicated attributes.
  • Camera, sound, and animation systems consume movement state or component events instead of owning movement rules.
  • Components expose Blueprint APIs while still supporting C++ extension points.
  • Networked movement lets the server own movement state while clients predict where responsive input matters.

For a first working setup, start with Quick start. Then either use How to add Motion to a character for an existing ACharacter or duplicate the shipped B_MotionCharacter for your own starter.

Component Profiles

Walk, sprint, crouch, jump, breathing, movement sound, and camera components read their authored defaults from profile DataAssets. Duplicate a Motion-owned profile into project content before changing shared movement feel, camera curves, sound tables, or GameplayEffect references.

Reference: Component profiles

Movement

Motion splits movement behavior into separate components. This keeps the feature set modular: a character can use walking and jumping without taking sprint, crouch, breathing, or sound behavior.

Walking

MotionWalkComponent tracks basic walking state and directional movement. It is the foundation most other movement features react to.

It handles velocity-based walking detection, directional helpers such as forward/back/strafe checks, GAS-backed speed changes, walking camera events, and walking-state delegates.

Reference: MotionWalkComponent

Sprinting

MotionSprintingComponent adds sprint speed, optional stamina, camera feedback, and client-predicted sprint intent.

Use it when sprinting is more than a single speed toggle. It can drain and regenerate stamina, use separate thresholds for starting and stopping sprint, support hold or toggle input, and report sprint state changes through delegates.

Reference: MotionSprintingComponent

Crouching

MotionCrouchingComponent coordinates crouch input, GAS state, camera height events, and collision-aware uncrouching.

It wraps Unreal's native crouch behavior rather than replacing the movement component's capsule logic. Motion adds the surrounding state, event, and camera coordination that first-person characters usually need.

Reference: MotionCrouchingComponent

Jumping

MotionJumpComponent extends jumping with responsiveness features such as coyote time, jump buffering, and optional multi-jump behavior.

The component also coordinates jump and landing camera curves and can automatically trigger the landing sound, while preserving server validation for multiplayer projects. Projects can call its separate jump-sound API when needed.

Reference: MotionJumpComponent

Breathing and Movement Sounds

MotionBreathingComponent adds subtle idle camera motion when the character is not walking. MotionMovementSoundComponent connects animation notifiers to surface-aware movement sounds.

These systems are intentionally separate from the core movement components. You can use them for presentation polish without coupling them to movement rules.

References:

Camera

Motion's movement components send camera feedback directly to MotionCameraComponent when one is present on the character.

MotionCameraComponent manages first-person camera height, procedural curve effects, static offsets, ceiling checks, and view-angle limits. Effects can be added, paused, resumed, or removed by identifier, which makes camera feedback reusable across walking, sprinting, jumping, crouching, and breathing.

References:

Animation

Motion's animation support is centered on MotionAnimInstance. It exposes movement and GAS state to Animation Blueprints without requiring each animation graph to rediscover the character, movement component, or AbilitySystemComponent.

MotionAnimInstance maps GameplayTags to Blueprint variables and updates cached ground-distance state during animation updates. It can also retry AbilitySystemComponent binding while PlayerState initialization catches up, cache active gameplay tags, and expose the active first-person item config when you use Motion's item system.

References:

First-Person Item Presentation

Motion includes a runtime and PIE-tuning workflow for local first-person item visuals. The system separates item configuration, basic upper-body held pose overlays, optional linked animation layers, paired first-person/world item presentations, and UE native first-person primitive roles.

The intent is to keep item-specific animation and presentation out of the shared character controller. A pistol, rifle, tool, or unarmed stance can provide a fallback held pose animation plus gameplay-tag-specific held pose entries through the native item config, or it can provide a custom overlay graph when it needs full control. Linked layers remain available for broader pose-set swaps.

This system handles first-person and world item visuals. Your project still owns equip state, inventory rules, and muzzle logic.

References:

GAS Integration

Motion uses the Gameplay Ability System as the shared state layer for movement. Components apply GameplayEffects, read replicated attributes, and react to GameplayTags.

MotionAttributeSet provides common movement attributes such as walk speed, jump velocity, stamina, maximum stamina, stamina regeneration, and stamina drain; Motion seeds this set on authority when it is absent. Sprint speed is represented as a GameplayEffect modifier to walk speed. Components can also discover same-named attributes in project AttributeSets, but using those values for movement requires GameplayEffects retargeted to them and equivalent synchronization back to CharacterMovementComponent where needed.

Motion's tag taxonomy covers walking, sprinting, crouching, jumping, stamina, held-item, and camera state. Motion.State.MovementHalted is declared for project use but is not set by the current Motion components.

References:

Debugging and Networking

Motion includes logging categories for individual systems, a Gameplay Debugger category for live movement state, and networking diagnostics for multiplayer validation.

References:

Utilities

Motion includes helper libraries for common Blueprint and C++ integration points.

MotionAbilitySystemHelper centralizes AbilitySystemComponent discovery and actor-info initialization, tag operations, effect application, attribute lookup, and platform-relative velocity calculations.

References:

Next steps

Use the overview as a map, then move to the page that matches your immediate need.

Motion - Advanced First Person Character Controller