Skip to content

Architecture

MotionCore adds modular first-person locomotion to existing ACharacter subclasses. A Motion-specific character base class is not necessary.

The architecture includes the Motion first-person item system. UMotionNativeFirstPersonItemConfig, UMotionHeldItemComponent, and UMotionCameraComponent control this system. UMotionCameraComponent owns the final view and native first-person presentation roles.

An empty CameraPivotSocketName selects Stable mode. This mode starts the camera from capsule and ground height. It then uses profile pitch strength to clear the capsule after it adds all camera offsets. The Stable camera / Motion 1.6 camera uses the evaluated full-body MotionCamera socket as a body reference. It does not use the socket as a camera origin. It applies a bounded shared curve correction to FirstPersonUpperBody and the attached item.

A valid nonempty name selects Socket mode. This mode uses the socket as the raw camera origin. It does not use Stable clearance or Stable camera / Motion 1.6 camera correction. An invalid socket causes an error and does not select Stable mode. See First-Person Item Configs.

Architecture Diagrams

High-Level Overview

This diagram shows the core architecture of MotionCore and how components integrate with your character:

Configuration Data

Motion separates shared component defaults from runtime state and item-specific authoring.

Component profiles are UPrimaryDataAsset assets for movement, sound, and camera components. Profiles contain behavior defaults. These defaults include movement, GameplayEffect, camera, sound, surface, and native first-person presentation settings.

The component calculates standing and crouched camera heights from capsule and crouch-height values. Components copy only profile values that change during play. They read constant values directly from the assigned profile. Profile assignment is setup configuration. It is not replicated gameplay state.

The Motion defaults are in Plugins/MotionCore/Content/Motion/Profiles/v2_0_0. Duplicate these profiles into project content before you change Motion behavior. Existing components continue to reference their assigned profile after Motion supplies new defaults.

Native first-person item configs are separate DataAssets. They contain item meshes, held poses, custom graphs, solve settings, transforms, linked layers, and render settings. Camera profiles contain shared settings for the Stable camera / Motion 1.6 camera. They do not contain item configs.

References:

GAS Integration

This diagram shows how the Gameplay Ability System (GAS) integrates with Motion components:

Component Integration

This diagram details how Motion components integrate with your existing character:

Camera Feedback

Movement components cache the MotionCameraComponent on the same actor and call it directly for curve playback or height changes. If no Motion camera is present, movement still works and camera polish is skipped.

Data Flow

This diagram shows how input flows through the system to create movement:

Networking and Multiplayer

This diagram shows the networking architecture for multiplayer games:

The ASC replication mode controls active GameplayEffect detail. Full replicates active effects to every client. Mixed sends active effects only to the local client. Minimal sends no active effects. GameplayTags and GameplayCues replicate in all three modes. Replicated AttributeSet properties use separate replication settings.

Functionality

Each layer in the architecture serves a specific purpose in the overall system:

Standard UE5 Framework Layer

This layer consists of standard Unreal Engine 5 classes that MotionCore integrates with:

  • GameMode: Your existing GameMode class - set PlayerStateClass to a PlayerState that owns or exposes a stable ASC for networked play
  • PlayerController: Your existing PlayerController. Your project owns the input bindings. A Motion-specific controller base class is not necessary.
  • PlayerState: PlayerState ownership is the recommended setup for networked ASC persistence. Expose it through IAbilitySystemInterface when possible. Motion can also find an ASC through documented character or PlayerState paths.
  • AbilitySystemComponent: Standard UE5 GAS component, usually on your PlayerState or character and discovered through UMotionAbilitySystemHelper

Character Core Layer

The foundation layer that MotionCore enhances without modification:

  • ACharacter: All character classes operate without inheritance from Motion classes.
  • CharacterMovementComponent: Standard UE5 movement component that Motion components modify
  • CapsuleComponent: Standard collision component used for crouch height adjustments
  • MotionCameraComponent: Advanced first-person camera with procedural effects and curve support
  • Animation Blueprint: Your animation system. Motion exposes UMotionAnimInstance, animation notifies, linked layers, and item integration APIs.

Motion Component System

Modular components add specific movement behaviors to a character:

  • MotionComponentBase: Base class that automatically finds necessary components.
  • Movement Components: Walk, Sprint, Crouch, Jump - each modifies the standard CharacterMovementComponent
  • Support Components: Sound and Breathing add audio and camera movement. Held Item owns active item presentation.
  • Components are selected for each character. Each component page lists its necessary and optional companion systems.

Input and Control Layer

Handles player input and component-driven state changes:

  • Enhanced Input System: Standard UE5 input system with provided Motion input actions
  • Component Input Handlers: Sprint, crouch, and jump components handle input intent, local validation, and server RPCs. Walk gets its state from movement velocity and ground contact.
  • GAS Integration: Components apply tags, GameplayEffects, and attributes through the AbilitySystemComponent. GameplayAbility activation is not necessary for these inputs.

Data and Configuration Layer

Content-driven configuration and runtime data:

  • MotionAttributeSet: GAS attributes for stamina, movement speeds, and other gameplay values
  • Gameplay Effects: Define Motion state tags and attribute modifications
  • Curves: UCurveVector assets provide camera location and rotation offsets
  • Sound Data: Surface-based footstep sounds with multi-variant support
  • MotionNativeFirstPersonItemConfig: Local first-person item asset. It selects paired presentations, overlays, solve settings, linked layers, transforms, and native render settings.
  • MotionNativeFirstPersonItemTuningComponent: PIE/editor tuning bridge that previews and saves native item transforms and render tuning back to the active native config

Local First-Person Item Presentation

The local first-person Motion item path is part of the character stack:

  • MotionHeldItemComponent owns the replicated active native item config at runtime
  • MotionNativeFirstPersonItemConfig provides the content-facing paired mesh setup, automatic tag-driven held pose animations or custom graph overlay mode, and configurable upper-body solve tuning
  • MotionNativeFirstPersonItemTuningComponent provides the native config saveback workflow for local PIE tuning
  • MotionCameraComponent assigns native first-person primitive roles to the body meshes. Stable mode clears the camera point against the capsule. It then aligns FirstPersonUpperBody and the attached item with the MotionCamera presentation reference. FirstPersonLowerBody stays at its authored ground transform. The world and full-body representations stay unchanged.
  • UMotionAnimInstance exposes the active config, active gameplay tag snapshot, overlay mode, resolved automatic held pose animation, and automatic blend tuning
  • A Motion First Person Item Upper Body Overlay node applies the basic held pose to the configured upper-body region. It then runs the Motion pitch and hand-IK solve.
  • Linked layers provide optional compatibility and broader pose sets. Custom overlay graph references are separate from the standard linked-layer class.

Content assets contain item transforms, mesh selection, held pose selection, custom overlay settings, and solve settings. The camera profile contains shared settings for the Stable camera / Motion 1.6 camera. Project item actions apply after the basic held pose when they must override it.

Utilities and Validation Layer

Development tools and runtime helpers:

  • Profile and item validation: Reports invalid authored profile and first-person item configuration
  • Logging System: Debug categories for Motion systems that currently emit logs
  • Helpers: Blueprint-exposed utilities for component and GAS operations

Key Design Principles

Universal Compatibility

  • A Motion-specific ACharacter subclass is not necessary
  • Integrates with standard UE5 components (CharacterMovementComponent, AbilitySystemComponent)

Modular Architecture

  • Motion features are split into optional components
  • Add only the applicable project components
  • Components automatically find necessary actors and systems at runtime

Standard UE5 Integration

  • Uses established UE5 patterns and best practices
  • Leverages built-in systems (GAS, Enhanced Input, Replication)
  • An initialized ASC must have the attributes and GameplayEffects documented for each enabled component. Motion does not have a CharacterMovement-only architecture.

Network-Ready Design

  • Server-authoritative movement with the standard CharacterMovementComponent
  • PlayerState ASC ownership is the recommended persistent network setup. Documented lookup paths also support an ASC on the character.
  • Sprint, crouch, and jump combine local response with server RPC handling

Developer-Friendly

  • Comprehensive Blueprint API for visual scripting
  • Clear separation of concerns between layers
  • Extensive logging and validation tools for debugging

GameplayEffect Integration

Motion components use GameplayEffects directly for state management:

Motion - Advanced First Person Character Controller