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 listen to movement state instead of owning it.
  • Components expose Blueprint APIs while still supporting C++ extension points.
  • Networked movement uses server authority with local prediction where responsive input matters.

For a first working setup, start with Quick start. For an existing project character, use How to add Motion to a character.

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 prediction support.

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 feedback, including camera curves and movement sounds, while preserving server validation for multiplayer projects.

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 camera system is event-driven. Movement components broadcast camera intents, and the camera component decides how to apply them.

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.

The event bus is the bridge between movement and camera presentation. It lets the built-in camera component react to Motion events, and it also gives custom camera systems a stable integration point.

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.

The animation instance can map GameplayTags to Blueprint variables, cache ground distance per frame, retry AbilitySystemComponent binding while PlayerState initialization catches up, expose the active native local first-person item config, cache active gameplay tags, and resolve upper-body automatic item held pose animation from the item config.

References:

First-Person Item Presentation

Motion includes a preview workflow for native local first-person item presentation. The system separates item configuration, baseline upper-body held pose overlays, optional linked animation layers, paired first-person/world item meshes, 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 workflow is for local first-person and world-space held-item presentation. Gameplay equip state, inventory rules, and muzzle logic remain project-owned.

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, sprint speed, jump velocity, stamina, maximum stamina, stamina regeneration, and stamina drain. Projects can also use their own AttributeSets, because Motion includes helper functions for discovering attributes by name.

Common state tags describe whether the character is walking, sprinting, crouching, jumping, movement-halted, stamina-depleted, or regenerating stamina. Ability tags describe whether actions such as jump, crouch, or sprint are currently available. Camera tags can suppress effects such as shake.

References:

Subsystem and Debugging

UMotionSubsystem is a local player subsystem that helps coordinate Motion components for the local player. It can register components, query active components, grant configured movement abilities, and centralize Visual Logger output.

Motion also includes logging categories for individual systems, Visual Logger integration for per-frame 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, tag operations, effect application, AttributeSet initialization, and platform-relative movement calculations.

MotionCurveFunctionLibrary exposes curve evaluation helpers for UCurveVector and runtime vector curves.

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