Why won't my character face where it's moving?¶
Movement input chooses where the Character tries to go. Rotation settings choose where the Character points. Those are related, but they are not the same setting.
The one-minute version¶
Add Movement Inputsends a world-space movement request. It does not decide which way the Character should face.- A third-person Character usually turns to face movement when Use Controller Rotation Yaw is off on the Character and Orient Rotation to Movement is on in the Character Movement Component.
- A shooter or strafe controller usually faces the camera/aim direction instead: controller yaw drives facing, while movement input can still move sideways.
- Rotation Rate controls how quickly Character Movement turns the Character when Character Movement is allowed to own rotation.
- If two rotation systems are enabled at once, the Character can appear to snap, refuse to turn, or face the camera instead of the movement direction.
- The camera can orbit without forcing the body to face the camera. That is a normal third-person setup, not a contradiction.
The two directions¶
When a beginner says "my character won't face where it is moving," there are usually two different directions involved:
movement direction = where Add Movement Input is asking the pawn to go
facing direction = the Character actor's yaw, usually where the capsule/body points
view direction = the controller/camera rotation, usually where the player looks
Those directions can match, but Unreal does not require them to match. A top-down character might move north while facing north. A third-person adventure character might move left and rotate until the body faces left. A shooter character might move left while still aiming forward.
That difference is why fixing this problem starts in Class Defaults and the Character Movement Component, not only in the input graph.
The three settings that matter¶
| Setting | Lives on | What it means |
|---|---|---|
| Use Controller Rotation Yaw | Character/Pawn defaults | The pawn's yaw follows the Controller's control rotation yaw. This is usually the camera or aim direction for a player. |
| Orient Rotation to Movement | Character Movement Component | Character Movement rotates the Character toward its acceleration/movement input direction, using Rotation Rate. |
| Use Controller Desired Rotation | Character Movement Component | Character Movement smoothly rotates the Character toward the Controller's desired rotation, usually the Controller's control rotation, using Rotation Rate. |
Use one facing owner for a beginner character. If the pawn is using controller yaw and Character Movement is also trying to rotate to movement or desired controller rotation, the result is harder to reason about.
The normal third-person setup¶
For a standard third-person adventure character, start with this combination:
Character / Pawn:
Use Controller Rotation Yaw = false
Character Movement:
Orient Rotation to Movement = true
Use Controller Desired Rotation = false
Rotation Rate = something visible, such as yaw 360 to 720
Camera boom / spring arm:
Use Pawn Control Rotation = true
Camera component:
Use Pawn Control Rotation = false
That setup lets the camera orbit from controller input while the body turns toward movement. The player can look around, press move, and the Character turns toward the movement input instead of instantly matching the camera yaw.
Do not assume a placed character instance has the same values as the Blueprint class. If one level instance behaves differently, select that instance in the level and check whether its overridden details disagree with the class defaults.
Common behavior recipes¶
Turn to face movement¶
Use this for many third-person platformer, adventure, and action RPG projects.
Use Controller Rotation Yaw = false
Orient Rotation to Movement = true
Use Controller Desired Rotation = false
Your input graph can still use the camera's yaw to decide movement directions:
Move input
-> Get Controller
-> Get Control Rotation
-> keep yaw, ignore pitch/roll
-> Get Forward Vector / Get Right Vector
-> Add Movement Input
Camera yaw chooses which direction "forward" means. Character Movement still owns the body turn.
Face the camera or aim direction¶
Use this for a shooter, lock-on strafe mode, or any character that should keep facing the reticle while moving sideways.
Use Controller Rotation Yaw = true
Orient Rotation to Movement = false
Use Controller Desired Rotation = false
With this setup, pressing left can move the Character left while the Character continues to face the camera/aim direction. That is correct strafe behavior, not a movement bug.
If you want Character Movement to smooth the turn toward controller direction instead of having pawn yaw directly follow it, use:
Use Controller Rotation Yaw = false
Orient Rotation to Movement = false
Use Controller Desired Rotation = true
That is still "face controller direction," not "face movement direction."
Tank-style turning¶
Use this when forward input should always move in the actor's current forward direction and a separate left/right input should rotate the actor.
MoveForward input
-> Get Actor Forward Vector
-> Add Movement Input
Turn input
-> Add Controller Yaw Input
Tank controls do not use camera-relative forward/right movement in the same
way a free third-person character does. If you feed camera forward into
Add Movement Input, you are asking for camera-relative movement, not
tank-style movement.
Why Add Movement Input is not the facing checkbox¶
Add Movement Input answers "which way should this pawn try to move this
frame?" It takes a world direction and a scale value. A Character then lets
Character Movement accumulate that input, turn it into acceleration, and move
the capsule during the movement update.
Facing is a later decision. Character Movement can look at acceleration and turn toward it, or the pawn can follow controller yaw, or Character Movement can turn toward controller desired rotation. That is why an input graph can be perfect while the body still faces the wrong direction.
Useful debug values:
- print the movement axis values to confirm input is firing;
- print or watch the vector you pass into
Add Movement Input; - watch the Character actor rotation, not only the camera rotation;
- check whether the Character Movement Component has nonzero acceleration while input is held.
When the character still does not turn¶
- No movement input is reaching the Character. If the input event is on the wrong Blueprint, the pawn is not possessed, or input is disabled, there may be no acceleration for Character Movement to face.
- Rotation Rate is zero or too low.
Orient Rotation to Movementcan be enabled, but a tiny yaw rate makes the turn look broken. - Use Controller Rotation Yaw is still enabled. The pawn keeps matching controller yaw, so movement-oriented rotation never gets to be the visible owner.
- Use Controller Desired Rotation is enabled for the wrong behavior. It points the Character toward controller direction, not movement direction.
- The mesh is rotated separately from the actor. Character Movement rotates the Character/capsule. Animation Blueprint logic, aim offsets, root motion, or a manually rotated mesh component can make the visible body disagree with the actor.
- Root motion is driving the animation. A root-motion animation can bring its own movement/turning behavior. Check whether the animation is moving or rotating the character root.
- You edited one instance, not the class. A placed
BP_PlayerCharactercan have overridden details that differ from the Blueprint defaults. - Network correction is replacing local motion. In multiplayer, the server owns authoritative movement. Client-only movement or rotation changes can appear briefly and then be corrected.
Animation Blueprint trap¶
An Animation Blueprint often reads velocity and decides whether to play idle, walk, or run. That does not automatically rotate the Character. Animation can react to movement, but the actual gameplay-facing choice usually belongs to the Character/Pawn and Character Movement settings.
If the animation looks sideways while the capsule is correct, inspect the mesh component's relative rotation, imported skeleton orientation, root motion, and aim offset before changing input code.
Going deeper¶
- Add Movement Input - the movement request node that usually feeds Character Movement.
- Get Velocity - how movement becomes the velocity values your Animation Blueprint reads.
- Possession - why a Character that is not possessed may never receive movement input.
- Set Input Mode & Show Mouse Cursor - why a UI mode can make gameplay movement stop firing.
- Official docs: APawn, UCharacterMovementComponent, ComputeOrientToMovementRotation, and Movement Components.
- Engine source (requires engine access - we do not reproduce it here):
APawn::FaceRotationandbUseControllerRotationYawinEngine/Source/Runtime/Engine/Private/Pawn.cppandEngine/Source/Runtime/Engine/Classes/GameFramework/Pawn.h;UCharacterMovementComponent::PhysicsRotation,UCharacterMovementComponent::ComputeOrientToMovementRotation,bOrientRotationToMovement,bUseControllerDesiredRotation, andRotationRateinEngine/Source/Runtime/Engine/Private/Components/CharacterMovementComponent.cppandEngine/Source/Runtime/Engine/Classes/GameFramework/CharacterMovementComponent.h.