Quick answer: Enable Orient Rotation to Movement on the Character Movement component, turn off Use Controller Rotation Yaw on the character, and give it a non-zero Rotation Rate yaw. For the camera, set the Spring Arm to use pawn control rotation. AI characters that slide without turning need Use Acceleration for Paths.
This is one of the first problems people hit when building a third-person character from scratch rather than from the template. The character strafes like a crab, moonwalks backwards, or turns with the mouse instead of the direction it walks. Three settings decide it.
The three settings that decide facing
- Character Movement > Orient Rotation to Movement: on. The movement component turns the character toward its acceleration direction.
- Character (class defaults) > Pawn > Use Controller Rotation Yaw: off. When on, the character's yaw is copied from the controller (your mouse or right stick) every frame, which overrides orient-to-movement and makes the character face the camera.
- Character Movement > Rotation Rate: a non-zero yaw, such as 500 to 720 degrees per second. With zero, orient-to-movement is enabled but never turns the character.
// AMyCharacter constructor
bUseControllerRotationYaw = false;
GetCharacterMovement()->bOrientRotationToMovement = true;
GetCharacterMovement()->RotationRate = FRotator(0.f, 540.f, 0.f);
Make the camera orbit independently
With the character no longer following the controller, the camera has to. On the Spring Arm, enable Use Pawn Control Rotation; on the Camera attached to it, leave it off. The controller now rotates the camera rig while the body turns toward movement.
Your movement input must also be relative to the camera, not the character, or forward will mean “wherever the character currently faces” and it will spiral:
const FRotator YawRotation(0.f, Controller->GetControlRotation().Yaw, 0.f);
const FVector Forward = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
const FVector Right = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);
AddMovementInput(Forward, MoveValue.Y);
AddMovementInput(Right, MoveValue.X);
Conflicting setting: Use Controller Desired Rotation
Character Movement also has Use Controller Desired Rotation, which smoothly turns the character toward the controller's rotation. If Orient Rotation to Movement is on, it takes priority. Strafing setups (aiming, lock-on) switch between the two at runtime: turn orient-to-movement off and desired rotation on while aiming, and back again afterwards.
AI characters slide without turning
Orient-to-movement turns toward acceleration. By default, path following on AI characters requests velocity directly, so acceleration can be zero and the character slides along the path facing one way. Enable Use Acceleration for Paths in the Character Movement component's Nav Movement settings, or enable Use Controller Desired Rotation on AI characters and let the AI controller set focus.
Other things that override rotation
- Root motion montages that include rotation drive the character's rotation while they play. If your character stops turning during attacks, that is why; Allow Physics Rotation During Anim Root Motion on the movement component changes it.
- The wrong pawn class: if the GameMode's Default Pawn Class is not your Blueprint, none of your settings apply. Check World Settings for a GameMode Override.
- Values set in C++ but overridden in the Blueprint: Blueprint class defaults win over constructor values once saved. Check both.
Movement bugs from players
Movement and camera bugs rarely crash, so they only reach you if players report them. Bugnet's Unreal SDK gives your UMG pause menu a ReportBug() call that files the report with a screenshot, the level and the player's hardware attached.
Related problems
- Fix: Unreal Character Movement Component Not Working
- How to Fix Unreal Character Movement Feeling Floaty
- Fix: Unreal AI MoveTo Not Working
Frequently asked questions
How do I make an Unreal character face the direction it moves?
Enable Orient Rotation to Movement on the Character Movement component, disable Use Controller Rotation Yaw on the character, and set a non-zero Rotation Rate yaw.
Why does my Unreal character always face the camera?
Use Controller Rotation Yaw is enabled on the character, so its yaw follows the controller. Turn it off and use Orient Rotation to Movement instead.
Why do AI characters slide without turning in Unreal?
Orient Rotation to Movement uses acceleration, and AI path following can move without it. Enable Use Acceleration for Paths, or use controller desired rotation with AI focus.
Orient to movement on, controller yaw off, rotation rate above zero. In that order.