Spring Arm + Camera¶
A Camera Component is the viewpoint. A Spring Arm is the boom that positions that viewpoint at a useful distance and moves it out of walls.
The one-minute version¶
- A Camera Component represents a camera viewpoint and settings such as field of view and post process.
- A Spring Arm Component keeps its child components at a target distance from its parent, usually with the camera attached at the end.
- Target Arm Length is the normal camera distance when nothing is blocking the boom.
- With collision testing enabled, the spring arm probes between the character and the desired camera position. If something blocks the probe, the arm retracts and the camera moves closer.
- Use Pawn Control Rotation on the spring arm usually means the camera boom follows the PlayerController's view/control rotation.
- Camera lag smooths camera movement. It does not fix bad collision channels, wrong attachment, or a character-facing setup that is fighting the camera.
The pieces¶
For a normal third-person character, the component tree looks like this:
BP_PlayerCharacter
-> CapsuleComponent
-> Mesh
-> SpringArm / CameraBoom
-> FollowCamera
The spring arm is not the camera. It is a positioning component. The camera is attached to the spring arm's end, and the view uses the camera component's transform and camera settings.
flowchart LR
Controller[PlayerController control rotation] --> Arm[Spring Arm target rotation]
Character[Character location] --> Arm
Arm --> Probe[Collision probe]
Probe --> Camera[Camera component position]
Camera --> View[Player view]
That separation is useful. You can change boom distance, camera collision, lag, or rotation inheritance without moving the character mesh or rewriting input.
The settings that matter first¶
| Setting | Lives on | Beginner meaning |
|---|---|---|
| Target Arm Length | Spring Arm | Desired distance from the arm origin to the camera when unobstructed. |
| Use Pawn Control Rotation | Spring Arm or Camera | Use the pawn/controller view rotation where possible. Usually enabled on the boom, not also on the child camera. |
| Inherit Pitch / Yaw / Roll | Spring Arm | Which parent rotation axes the boom inherits when not using absolute rotation. |
| Do Collision Test | Spring Arm | Whether the boom retracts when geometry blocks the desired camera position. |
| Probe Channel | Spring Arm | Collision channel used by the boom's camera-collision query, commonly the Camera channel. |
| Probe Size | Spring Arm | Size of the collision probe sphere, in Unreal units. |
| Socket Offset | Spring Arm | Offset at the end of the boom. Prefer this over moving the child camera away from the boom end. |
| Enable Camera Lag / Camera Lag Speed | Spring Arm | Smooth position changes by letting the camera catch up over time. |
| Enable Camera Rotation Lag / Camera Rotation Lag Speed | Spring Arm | Smooth rotation changes by letting camera rotation catch up over time. |
| Field Of View | Camera Component | How wide the perspective view is. |
Start with Target Arm Length, collision, and control rotation. Lag and field of view are feel tuning after the camera is attached and rotating correctly.
What the spring arm actually does¶
The spring arm chooses a desired camera position, then optionally moves that position closer if collision blocks it:
pseudocode - not engine source
SpringArm tick:
get arm origin from parent component
get target rotation from parent/control-rotation settings
desired camera position = origin - target forward * TargetArmLength
desired camera position += SocketOffset / TargetOffset settings
if collision test is enabled:
probe from origin toward desired camera position
if probe hits blocking geometry:
camera position = hit-adjusted closer position
else:
camera position = desired camera position
apply lag settings if enabled
place child camera at the result
That "camera pushes in near a wall" behavior is the spring arm working. Without it, the camera can stay at its fixed offset and clip through the wall, showing the inside or outside of geometry instead of the character.
Use Pawn Control Rotation¶
For a common orbiting third-person camera:
Character / Pawn:
Use Controller Rotation Yaw = false
Character Movement:
Orient Rotation to Movement = true
Spring Arm:
Use Pawn Control Rotation = true
Camera Component:
Use Pawn Control Rotation = false
The PlayerController's look input changes control rotation. The spring arm uses that rotation to orbit the camera. The camera component rides at the end of the boom. The character body can still turn toward movement instead of instantly matching the camera.
If you also enable pawn controller yaw on the Character, the body may face the camera/aim direction. That can be correct for a shooter, but it is a different control style from "camera orbits while the body turns toward movement."
See Why won't my character face where it's moving? for the facing-side of the setup.
Target Arm Length¶
Target Arm Length is the normal boom length when no collision is applied. It is not guaranteed camera distance every frame.
Target Arm Length = 300
-> desired camera is about 300 Unreal units from the arm origin
Wall between character and desired camera
-> spring arm retracts
-> actual camera distance can be less than 300
If your camera is always too close:
- check whether Target Arm Length is small or zero;
- check whether Do Collision Test is constantly retracting the boom;
- check whether the camera is attached to the spring arm end;
- check whether the spring arm origin is inside the mesh/capsule in a bad place.
If the camera never comes closer near walls, check Do Collision Test, Probe Channel, and whether the wall blocks that channel.
Camera collision is collision settings too¶
The spring arm collision test uses a probe channel and a probe size. That means ordinary collision-response rules still matter.
Examples:
- a wall that blocks the Camera channel can retract the boom;
- a wall that ignores the Camera channel may let the camera clip through;
- a small prop that blocks Camera can pull the camera in even if the player capsule can walk past it;
- a large probe size can retract earlier because the probe sphere touches nearby geometry sooner.
If the camera pushes in unexpectedly, do not only stare at camera settings. Inspect the blocking object's collision responses, especially the Camera channel, and use collision visualization/debugging to confirm what the probe is touching.
Camera lag¶
Camera lag smooths the camera's position. Rotation lag smooths the camera's rotation. These are presentation tools, not input or collision fixes.
Use lag when:
- the camera feels too rigidly glued to the character;
- small character movements make the camera jitter visually;
- you want a heavier follow-camera feel.
Be careful with lag when:
- the player needs very precise aiming;
- tight spaces already cause frequent spring-arm retraction;
- the character moves very fast and the camera falls too far behind;
- debugging collision, because lag can hide the exact moment the boom retracts.
Turn lag off while diagnosing attachment, collision, or control-rotation problems. Tune lag after the camera is already correct.
What you lose by skipping the arm¶
You can attach a Camera Component directly to a character. For first-person camera work, that can be exactly right.
For third-person follow cameras, skipping the spring arm usually means you lose:
- automatic camera pull-in when walls block the view;
- a single Target Arm Length distance knob;
- built-in camera lag and rotation lag;
- a convenient boom origin/rotation separate from the camera component itself;
- Socket Offset/Target Offset behavior designed around the boom trace.
The quick path is to attach the camera directly and move it until it looks right in the viewport. The concrete cost is that the first wall, doorway, or fast turn exposes missing collision and smoothing behavior. For a third-person starter character, the spring arm is the better foundation.
When the camera behaves strangely¶
- The camera is not attached to the spring arm. It may be a sibling of the arm instead of a child at the arm's end.
- Target Arm Length is zero or tiny. The boom is doing what it was told: keep the camera close.
- Collision is constantly retracting the arm. Check Do Collision Test, Probe Size, Probe Channel, and nearby objects that block the Camera channel.
- Collision is not retracting at all. The blocking object may ignore the probe channel, or Do Collision Test may be off.
- Use Pawn Control Rotation is on in the wrong place. The boom, camera, pawn, and movement component can all be part of rotation behavior. Pick a clear owner.
- The camera is fighting character facing. A shooter setup and an adventure-camera setup use different rotation checkboxes.
- Lag is hiding the cause. Disable camera lag and rotation lag while debugging exact camera position and collision.
- You are viewing a different camera. The PlayerController's view target may not be the pawn/camera you are editing.
Lookalikes¶
| Thing | Use when | Not the same as |
|---|---|---|
| Camera Component | An actor or pawn needs a viewpoint and camera settings. | A collision-aware boom. |
| Spring Arm Component | A camera or other child should stay at a target distance but retract around obstructions. | The view target itself. |
| CameraActor | You want a standalone camera placed in the level, often for cutscenes or fixed shots. | The player's character follow camera. |
| Set View Target with Blend | A PlayerController should view through another actor/camera. | Moving or rotating the camera boom. |
| Use Controller Rotation Yaw | The pawn body should face controller yaw. | Camera boom rotation by itself. |
| Orient Rotation to Movement | Character Movement should rotate the body toward movement. | Camera orbit behavior. |
Going deeper¶
- Why won't my character face where it's moving? - the body-facing settings that often get confused with camera rotation.
- Character Movement Component: the knobs that matter - movement settings that decide how the character feels under the camera.
- Add Movement Input - camera-relative movement input using control rotation.
- Line Trace By Channel - the query/collision mental model that also explains camera probes.
- Collision presets, channels, and responses - why the Camera channel has to be blocked by the things you expect to pull the camera in.
- Official docs: USpringArmComponent, UCameraComponent, Camera Components, Using Spring Arm Components, and Cameras.
- Engine source (requires engine access - we do not reproduce it here):
USpringArmComponent::TickComponent,USpringArmComponent::UpdateDesiredArmLocation,USpringArmComponent::BlendLocations, andUSpringArmComponent::GetTargetRotationinEngine/Source/Runtime/Engine/Private/GameFramework/SpringArmComponent.cppandEngine/Source/Runtime/Engine/Classes/GameFramework/SpringArmComponent.h; camera view settings live inEngine/Source/Runtime/Engine/Classes/Camera/CameraComponent.h.