/ue-character-movement
Use this skill when working with character movement, CharacterMovementComponent, CMC, movement modes, walking, falling, swimming, flying, custom movement, network prediction, FSavedMove, root motion, floor detection, step-up, or character physics. Also use for 'PhysWalking',
$ npx -y skills add quodsoler/unreal-engine-skills --skill ue-character-movement --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/ue-character-movement
Context preview
The summary Claude sees to decide when to auto-load this skill.
Use this skill when working with character movement, CharacterMovementComponent, CMC, movement modes, walking, falling, swimming, flying, custom movement, network prediction, FSavedMove, root motion, floor detection, step-up, or character physics. Also use for 'PhysWalking',
SKILL.md
ue-character-movement.SKILL.mdname: ue-character-movement
description: "Use this skill when working with character movement, CharacterMovementComponent, CMC, movement modes, walking, falling, swimming, flying, custom movement, network prediction, FSavedMove, root motion, floor detection, step-up, or character physics. Also use for 'PhysWalking', 'PhysCustom', 'LaunchCharacter', 'WalkableFloor', or 'movement replication'. See references/ for CMC extension patterns and movement pipeline details."
metadata:
version: 1.0.0
UE Character Movement
You are an expert in Unreal Engine's `UCharacterMovementComponent` (CMC), the core system that drives character locomotion, floor detection, network prediction, and root motion integration. You understand the full Phys* pipeline, custom movement mode implementation, and the `FSavedMove_Character` prediction architecture.
Context Check
Read `.agents/ue-project-context.md` to determine:
- Whether the project uses `ACharacter` or a custom pawn with its own movement
- The UE version (UE 5.4+ adds `GravityDirection` support, UE 5.5 changes `DoJump` signature)
- Whether multiplayer is involved (affects prediction pipeline complexity)
- Any existing CMC subclass or custom movement modes already in use
Information Gathering
Ask the developer: 1. Are you extending `UCharacterMovementComponent` or configuring the default one? 2. Do you need custom movement modes (wall-running, climbing, dashing)? 3. Is this multiplayer? If so, do custom abilities need network prediction? 4. Are you integrating root motion from animations or gameplay code? 5. Do you need custom gravity directions (UE 5.4+)?
---
CMC Architecture
`UCharacterMovementComponent` sits at the end of a four-level class hierarchy:
UMovementComponent
-> UNavMovementComponent
-> UPawnMovementComponent
-> UCharacterMovementComponentCMC also implements `IRVOAvoidanceInterface` and `INetworkPredictionInterface`. It is declared `UCLASS(MinimalAPI)`.
CMC lives as a default subobject on `ACharacter`, created in the constructor. `ACharacter` provides the capsule, skeletal mesh, and high-level actions (`Jump`, `Crouch`, `LaunchCharacter`), while CMC handles the actual physics simulation, floor detection, and network prediction.
Movement Modes
CMC dispatches movement logic through `EMovementMode`:
| Mode | Value | Description | |------|-------|-------------| | `MOVE_None` | 0 | No movement processing | | `MOVE_Walking` | 1 | Ground movement with floor detection and step-up | | `MOVE_NavWalking` | 2 | Walking driven by navmesh projection | | `MOVE_Falling` | 3 | Airborne — gravity, air control, landing detection | | `MOVE_Swimming` | 4 | Fluid movement with buoyancy | | `MOVE_Flying` | 5 | Free 3D movement, no gravity | | `MOVE_Custom` | 6 | User-defined; dispatches to `PhysCustom` with a `uint8` sub-mode | | `MOVE_MAX` | 7 | Sentinel value |
Change modes with `SetMovementMode(EMovementMode, uint8 CustomMode = 0)`. The CMC calls `OnMovementModeChanged(PreviousMode, PreviousCustomMode)` after every transition, which is the correct place to handle enter/exit logic for custom modes.
---
Phys* Movement Pipeline
Every tick, CMC processes movement through a strict pipeline. Understanding this flow is essential for writing correct custom movement or debugging unexpected behavior.
`PerformMovement(float DeltaTime)` is the main entry point (protected). It calls `StartNewPhysics()`, which dispatches to the appropriate `Phys*` function based on the current `EMovementMode`. Each `Phys*` function is `protected virtual`:
- `PhysWalking(float deltaTime, int32 Iterations)` — ground movement
- `PhysNavWalking(float deltaTime, int32 Iterations)` — navmesh-projected walking
- `PhysFalling(float deltaTime, int32 Iterations)` — airborne/gravity
- `PhysSwimming(float deltaTime, int32 Iterations)` — fluid movement
- `PhysFlying(float deltaTime, int32 Iterations)` — free flight
- `PhysCustom(float deltaTime, int32 Iterations)` — your code here
Inside each `Phys*` function, two core methods do the heavy lifting:
**`CalcVelocity`** computes the velocity for this frame:
// BlueprintCallable
void CalcVelocity(float DeltaTime, float Friction, bool bFluid, float BrakingDeceleration);
**`SafeMoveUpdatedComponent`** moves the capsule and resolves penetration:
virtual bool SafeMoveUpdatedComponent(
const FVector& Delta,
const FQuat& NewRotation,
bool bSweep,
FHitResult& OutHit,
ETeleportType Teleport = ETeleportType::None
);It wraps `MoveUpdatedComponent` and automatically handles depenetration if the move results in an overlap. Always prefer `SafeMoveUpdatedComponent` over `MoveUpdatedComponent` in custom Phys* functions.
When a sweep hits a surface, `SlideAlongSurface` projects movement along it. When hits occur in a corner (two blocking surfaces), CMC calls `TwoWallAdjust` (virtual on `UMovementComponent`) to compute a safe movement direction that avoids both walls. During `PhysWalking`, `ComputeGroundMovementDelta` (virtual) adjusts the velocity delta to follow the floor slope — it projects horizontal input onto the floor plane so the character walks along inclines rather than into them.
See `references/movement-pipeline.md` for the full flow diagram and per-mode breakdown.
---
Floor Detection
CMC's walking mode relies on continuous floor detection to determine whether the character is grounded.
FFindFloorResult
struct FFindFloorResult
{
uint32 bBlockingHit : 1; // Sweep hit something
uint32 bWalkableFloor : 1; // Hit surface passes walkability test
uint32 bLineTrace : 1; // Result came from line trace (not sweep)
float FloorDist; // Distance from capsule bottom to floor
float LineDist; // Distance from line trace
FHitResult HitResult; // Full hit result data
bool IsWalkableFloor() const { return bBlockingHit && bWalkableFloor; }
};Floor Detection Methods
`Fi
Read more
name: ue-character-movement description: "Use this skill when working with character movement, CharacterMovementComponent, CMC, movement modes, walking, falling, swimming, flying, custom movement, network prediction, FSavedMove, root motion, floor detection, step-up, or character physics. Also use for 'PhysWalking', 'PhysCustom', 'LaunchCharacter', 'WalkableFloor', or 'movement replication'. See references/ for CMC extension patterns and movement pipeline details." metadata: version: 1.0.0
UE Character Movement
You are an expert in Unreal Engine's `UCharacterMovementComponent` (CMC), the core system that drives character locomotion, floor detection, network prediction, and root motion integration. You understand the full Phys* pipeline, custom movement mode implementation, and the `FSavedMove_Character` prediction architecture.
Context Check
Read `.agents/ue-project-context.md` to determine:
- Whether the project uses `ACharacter` or a custom pawn with its own movement
- The UE version (UE 5.4+ adds `GravityDirection` support, UE 5.5 changes `DoJump` signature)
- Whether multiplayer is involved (affects prediction pipeline complexity)
- Any existing CMC subclass or custom movement modes already in use
Information Gathering
Ask the developer: 1. Are you extending `UCharacterMovementComponent` or configuring the default one? 2. Do you need custom movement modes (wall-running, climbing, dashing)? 3. Is this multiplayer? If so, do custom abilities need network prediction? 4. Are you integrating root motion from animations or gameplay code? 5. Do you need custom gravity directions (UE 5.4+)?
---
CMC Architecture
`UCharacterMovementComponent` sits at the end of a four-level class hierarchy:
UMovementComponent
-> UNavMovementComponent
-> UPawnMovementComponent
-> UCharacterMovementComponentCMC also implements `IRVOAvoidanceInterface` and `INetworkPredictionInterface`. It is declared `UCLASS(MinimalAPI)`.
CMC lives as a default subobject on `ACharacter`, created in the constructor. `ACharacter` provides the capsule, skeletal mesh, and high-level actions (`Jump`, `Crouch`, `LaunchCharacter`), while CMC handles the actual physics simulation, floor detection, and network prediction.
Movement Modes
CMC dispatches movement logic through `EMovementMode`:
| Mode | Value | Description | |------|-------|-------------| | `MOVE_None` | 0 | No movement processing | | `MOVE_Walking` | 1 | Ground movement with floor detection and step-up | | `MOVE_NavWalking` | 2 | Walking driven by navmesh projection | | `MOVE_Falling` | 3 | Airborne — gravity, air control, landing detection | | `MOVE_Swimming` | 4 | Fluid movement with buoyancy | | `MOVE_Flying` | 5 | Free 3D movement, no gravity | | `MOVE_Custom` | 6 | User-defined; dispatches to `PhysCustom` with a `uint8` sub-mode | | `MOVE_MAX` | 7 | Sentinel value |
Change modes with `SetMovementMode(EMovementMode, uint8 CustomMode = 0)`. The CMC calls `OnMovementModeChanged(PreviousMode, PreviousCustomMode)` after every transition, which is the correct place to handle enter/exit logic for custom modes.
---
Phys* Movement Pipeline
Every tick, CMC processes movement through a strict pipeline. Understanding this flow is essential for writing correct custom movement or debugging unexpected behavior.
`PerformMovement(float DeltaTime)` is the main entry point (protected). It calls `StartNewPhysics()`, which dispatches to the appropriate `Phys*` function based on the current `EMovementMode`. Each `Phys*` function is `protected virtual`:
- `PhysWalking(float deltaTime, int32 Iterations)` — ground movement
- `PhysNavWalking(float deltaTime, int32 Iterations)` — navmesh-projected walking
- `PhysFalling(float deltaTime, int32 Iterations)` — airborne/gravity
- `PhysSwimming(float deltaTime, int32 Iterations)` — fluid movement
- `PhysFlying(float deltaTime, int32 Iterations)` — free flight
- `PhysCustom(float deltaTime, int32 Iterations)` — your code here
Inside each `Phys*` function, two core methods do the heavy lifting:
**`CalcVelocity`** computes the velocity for this frame:
// BlueprintCallable void CalcVelocity(float DeltaTime, float Friction, bool bFluid, float BrakingDeceleration);
**`SafeMoveUpdatedComponent`** moves the capsule and resolves penetration:
virtual bool SafeMoveUpdatedComponent(
const FVector& Delta,
const FQuat& NewRotation,
bool bSweep,
FHitResult& OutHit,
ETeleportType Teleport = ETeleportType::None
);It wraps `MoveUpdatedComponent` and automatically handles depenetration if the move results in an overlap. Always prefer `SafeMoveUpdatedComponent` over `MoveUpdatedComponent` in custom Phys* functions.
When a sweep hits a surface, `SlideAlongSurface` projects movement along it. When hits occur in a corner (two blocking surfaces), CMC calls `TwoWallAdjust` (virtual on `UMovementComponent`) to compute a safe movement direction that avoids both walls. During `PhysWalking`, `ComputeGroundMovementDelta` (virtual) adjusts the velocity delta to follow the floor slope — it projects horizontal input onto the floor plane so the character walks along inclines rather than into them.
See `references/movement-pipeline.md` for the full flow diagram and per-mode breakdown.
---
Floor Detection
CMC's walking mode relies on continuous floor detection to determine whether the character is grounded.
FFindFloorResult
struct FFindFloorResult
{
uint32 bBlockingHit : 1; // Sweep hit something
uint32 bWalkableFloor : 1; // Hit surface passes walkability test
uint32 bLineTrace : 1; // Result came from line trace (not sweep)
float FloorDist; // Distance from capsule bottom to floor
float LineDist; // Distance from line trace
FHitResult HitResult; // Full hit result data
bool IsWalkableFloor() const { return bBlockingHit && bWalkableFloor; }
};Floor Detection Methods
`Fi
A collection of 27 AI agent skills for Unreal Engine C++ development. Built for game developers who want AI coding agents to help write correct, production-quality UE5 C++ code.
Other skills on unreal-engine-skills.
- /ue-actor-component-architecture
Use this skill when working with Actor and component design in Unreal Engine. Triggers on: Actor, component, BeginPlay, Tick, SpawnActor, lifecycle, CreateDefaultSubobject, composition, EndPlay, PostInitializeComponents, UActorComponent, USceneComponent, UINTERFACE, attachment,
Open skill - /ue-ai-navigation
Use this skill when implementing AI, AIController, behavior tree, blackboard, AI perception, NavMesh, EQS, navigation, pathfinding, State Tree, or Smart Objects in Unreal Engine. See references/behavior-tree-patterns.md for BT patterns and references/eqs-reference.md for EQS
Open skill - /ue-animation-system
Use this skill when working with Unreal Engine animation: AnimInstance, montage playback, blend space, state machine, anim notify, IK, AnimGraph, skeletal mesh, or linked anim graphs. See references/anim-notify-reference.md for notify patterns and references/locomotion-setup.md
Open skill - /ue-async-threading
Use this skill when working with Unreal Engine async operations, threading, parallel execution, or concurrency. Also use when the user mentions 'FRunnable', 'FAsyncTask', 'TaskGraph', 'UE::Tasks', 'ParallelFor', 'TFuture', 'TPromise', 'Async()', 'thread safety',
Open skill - /ue-audio-system
Use this skill when working with audio, sound, music, UAudioComponent, PlaySoundAtLocation, SoundCue, MetaSound, attenuation, submix, concurrency, SFX, or spatial audio in Unreal Engine. See references/audio-setup-patterns.md for music system and ambient soundscape
Open skill - /ue-cpp-foundations
Use when writing Unreal Engine C++ code involving UPROPERTY, UFUNCTION, UCLASS, TArray, TMap, delegates, FString, garbage collection, or smart pointers. Also use when the user asks about "UE C++", USTRUCT, UENUM, FName, FText, TObjectPtr, TWeakObjectPtr, UObject lifetime,
Open skill

