Appearance
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
ACharactersubclass 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:
- First-person item configs
- How linked animation layers work in Motion
- How to create a first-person item config
- How to create and link an animation layer
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.