Skip to content

Quick Start Guide

Hello and welcome! This guide helps you set up Motion 2.0 Preview 3.

Engine Requirement

Motion 2.0 Preview 3 requires Unreal Engine 5.6 or later.

Setup

  1. Add the Plugin to Your Project

    • Copy the MotionCore folder to your project's Plugins directory
    • Restart the Unreal Editor
    • Enable the plugin in Edit → Plugins → MotionCore
  2. Configure Your PlayerState with Gameplay Ability System (GAS) (Required)

    • Motion requires a PlayerState that implements IAbilitySystemInterface or
    • Use any PlayerState class / blueprint that provides an AbilitySystemComponent
    • To get started, you can also just use the B_MotionPlayerState that ships with Motion.
  3. Set the PlayerState in your GameMode (Required)

    • Either use B_MotionGameMode that ships with Motion or
    • Add your configured PlayerState class to your GameMode.

  4. Load the Demonstration Map

    • Open the default demonstration map at Plugins/MotionCore/Content/Motion/Maps/Default

Using the Pre-made Character

Find the Demo Character

Enable "Show Plugin Content" in the Content Browser to see plugin assets.

  • Locate B_MotionCharacter in Plugins/MotionCore/Content/Motion/Blueprints
  • This character demonstrates all Motion components pre-configured
  • Drag it into your level or set it as the default pawn in your GameMode

Play the Demo

Press Play to test the character with all movement components:

Basic Controls:

  • WASD: Movement
  • Space: Jump
  • Shift: Sprint
  • Ctrl: Crouch
  • Mouse: Look around

Exploring Pre-made Components

The B_MotionCharacter includes these pre-configured C++ components:

Movement Components

  • MotionWalkComponent: Base walking mechanics, movement direction analysis, and walking state
  • MotionSprintingComponent: Sprint mechanics with optional stamina management (disabled by default)
  • MotionCrouchingComponent: Smooth crouching with collision detection
  • MotionJumpComponent: Enhanced jump mechanics with landing detection

Support Components

  • MotionCameraComponent: First-person camera with camera animation curves
  • MotionCameraEventBus: Central event broker for camera effect communication in Motion
  • MotionBreathingComponent: Camera animation when standing still
  • MotionMovementSoundComponent: Surface-aware footsteps and movement audio

GAS Integration

  • MotionAttributeSet: Movement attributes (speed, acceleration, etc.)

Network Features

  • Test with multiple players: Play -> Number of Players: 2
  • Select Play as Client in Net Mode to test client-side prediction
  • Movement states properly replicate across clients

Adding Motion to Your Own Character

Add Motion components to any existing ACharacter:

Option 1: Blueprint Setup

  1. Open your existing character Blueprint
  2. Add all required Motion components from the Components panel:
    • Movement Components (add what you need):
      • MotionWalkComponent - Base walking speed management (recommended as foundation)
      • MotionSprintingComponent - Sprint with stamina
      • MotionCrouchingComponent - Smooth crouching
      • MotionJumpComponent - Enhanced jumping
    • Support Components:
      • MotionCameraComponent - First-person camera with curves
      • MotionCameraEventBus - Required for camera effect communication
      • MotionBreathingComponent - Idle camera breathing (optional)
      • MotionMovementSoundComponent - Footsteps and movement audio (optional)
  3. Set up your Animation Blueprint:
    • Create an Animation Blueprint that uses UMotionAnimInstance as its parent class, OR
    • Implement GAS tag-to-variable mapping in your existing AnimBP (strongly recommended for proper state sync)
  4. Initialize the Ability System in BeginPlay:
    • Call Initialize Character Ability System with Attribute Set (from Motion Ability System Helper)
    • Pass MotionAttributeSet class (or your own AttributeSet that includes Motion attributes)
  5. Configure Enhanced Input bindings to trigger abilities
  6. Motion components automatically find and integrate with your CharacterMovementComponent

Option 2: C++ Setup

cpp
// In your character header (.h)
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Motion")
TObjectPtr<UMotionWalkComponent> MotionWalkComponent;

UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Motion")
TObjectPtr<UMotionSprintingComponent> MotionSprintComponent;

UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Motion")
TObjectPtr<UMotionCrouchingComponent> MotionCrouchComponent;

UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Motion")
TObjectPtr<UMotionJumpComponent> MotionJumpComponent;

UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Motion")
TObjectPtr<UMotionCameraComponent> MotionCameraComponent;

UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Motion")
TObjectPtr<UMotionCameraEventBus> MotionCameraEventBus;

// In your character constructor (.cpp)
MotionWalkComponent = CreateDefaultSubobject<UMotionWalkComponent>(TEXT("MotionWalk"));
MotionSprintComponent = CreateDefaultSubobject<UMotionSprintingComponent>(TEXT("MotionSprint"));
MotionCrouchComponent = CreateDefaultSubobject<UMotionCrouchingComponent>(TEXT("MotionCrouch"));
MotionJumpComponent = CreateDefaultSubobject<UMotionJumpComponent>(TEXT("MotionJump"));
MotionCameraComponent = CreateDefaultSubobject<UMotionCameraComponent>(TEXT("MotionCamera"));
MotionCameraEventBus = CreateDefaultSubobject<UMotionCameraEventBus>(TEXT("MotionCameraEventBus"));
cpp
// In BeginPlay - Initialize GAS with Motion attributes
void AYourCharacter::BeginPlay()
{
    Super::BeginPlay();

    // Initialize the Ability System with MotionAttributeSet
    UMotionAbilitySystemHelper::InitializeCharacterAbilitySystemWithAttributeSet(
        this,
        UMotionAttributeSet::StaticClass(),
        true  // bLogErrors
    );
}

Configure Input Bindings

Motion uses Enhanced Input with Gameplay Abilities:

  1. Create Input Actions for movement abilities or use the ones that ship with Motion.
  2. Call Add Mapping Context on the EnhancedInput of your player controller.
  3. Use BindSprintInput, BindCrouchInput, BindJumpInput to bind inputs to their respective components

Customization

Adjust Movement Parameters

Each Motion component exposes properties for customization:

  • SprintWalkSpeedModifier: Absolute speed value added when sprinting (default: +300)
  • CrouchWalkSpeedModifier: Absolute speed value added when crouching (default: -200)
  • JumpVelocityMultiplier: Multiplier for jump velocity (1.0 = default)
  • JumpVelocityModifier: Additional velocity to add to jumps

Camera Curves

The MotionCameraComponent uses curves for procedural effects:

  • Location curves for camera position offsets
  • Rotation curves for camera angle adjustments
  • Access via functions like AddMotionCurve(), AddStaticLocationOffset(), AddStaticRotationOffset()

Surface Sounds

Configure the MotionMovementSoundComponent:

  • Edit DT_MotionMovementSounds DataTable for surface-specific sounds
  • Supports MetaSound integration for dynamic audio

Next Steps

Create Custom Abilities

  • Design new movement abilities using the Gameplay Ability System
  • Create Gameplay Effects to modify movement attributes
  • Implement custom input bindings for your abilities

Extend Components

  • Inherit from Motion components to add custom behavior
  • Override virtual functions for specialized logic
  • Add new curves for unique camera effects

Optimize for Your Project

  • Remove unused Motion components to reduce overhead
  • Configure logging verbosity: log LogMotionCore Verbose

Test Multiplayer

  • Enable dedicated server mode for production testing
  • Monitor replication with showdebug net
  • Validate attribute synchronization across clients

Troubleshooting

Common Issues

Character doesn't move:

  • Ensure your PlayerState implements IAbilitySystemInterface
  • Check that Motion components are added to your character
  • Verify Enhanced Input is configured

GAS not working:

  • Confirm Gameplay Abilities plugin is enabled
  • Check that your PlayerState creates and owns an AbilitySystemComponent
  • Verify attributes are properly granted on your AttributeSet

Camera issues:

  • Ensure MotionCameraComponent is attached to character
  • Check curve assets are properly referenced

Debug Commands

log LogMotionCore Verbose       // Enable detailed logging
showdebug abilitysystem         // View GAS state

Learn More


Need Help?

Join the community Discord for support!

Motion - Advanced First Person Character Controller