Build a standard third-person follow camera — pivot locked to a target actor, camera offset behind and slightly above, stick-driven yaw/pitch, soft collision pushback. By the end you'll have a single UComposableCameraTypeAsset that runs on any character and activates from a one-line Blueprint call.
The chain we're building:
ReceivePivotActorNode reads FollowTarget, publishes PivotPosition
→ PivotOffsetNode shoulder-height lift
→ PivotDampingNode smooths pivot snaps (optional but recommended)
→ CameraOffsetNode pushes the camera behind the pivot
→ ControlRotateNode right-stick yaw + pitch input
→ RotationConstraints pitch clamp
→ CollisionPushNode trace + self-collision pushback
→ FieldOfViewNode author FOV
Each of these is a shipped node documented in the Node Catalog. The tutorial steps through authoring the asset, exposing parameters, wiring input, and activating it.
1. Create the type asset¶
Content Browser → right-click → Composable Camera System → Camera Type Asset. Name it CT_ThirdPersonFollow. Double-click to open the graph editor.
The canvas starts empty with a single Output node on the right — that's where the final pose ends up each frame.
2. Declare a FollowTarget variable¶
A follow camera needs to know which actor to follow. We expose that as a context variable so callers can pass it in on activation.
- Open the Exposed Variables panel (right side of the editor).
- Click + Add.
- Set Name to
FollowTarget, Type toActor Reference.
This variable now appears as a variable node in the palette and — crucially — it will become a pin on the Activate Camera K2 node in Blueprint.
3. The pivot chain¶
Drop these three nodes onto the canvas, left to right:
- ReceivePivotActor — wire
FollowTargetinto itsActorinput. - PivotOffset — set
OffsetSpaceto Actor Space,Offsetto(0, 0, 80)for shoulder height. Wire the receive node'sPivotPositionoutput into the offset node'sPivotPositioninput. - PivotDamping — add an Instanced
IIRInterpolatorin itsInterpolatorslot,Speed = 1,bUseFixedStep = true. Wire the previous node's output in.
The first three nodes handle what point the camera is tracking. They don't touch camera position or rotation yet.
4. Camera offset¶
Drop a CameraOffset node. Set:
Offset=(-400, 50, 20)— 4m behind, slightly right, slightly above the pivot.
Wire the previous node's output pose into its input. The camera now sits at a fixed offset from the pivot, but still points at wherever it was pointed when the tree was built (usually world origin).
5. Stick-driven orbit¶
Drop a ControlRotate node. Wire FollowTarget into its RotationInputActor pin (the actor owning the EnhancedInputComponent). In Details:
RotateAction— yourIA_Lookasset (or whatever you use for right-stick look input). This must be anUInputActionwithAxis2Dvalue type.HorizontalSpeed/VerticalSpeed—1/1are reasonable starting values.HorizontalDamping=(0.05, 0.1)— a short acceleration, slightly longer deceleration.VerticalDamping=(0.05, 0.1).bInvertPitch— toggle to taste.
Enhanced Input dependency
ControlRotateNode reads input via the Enhanced Input system. If EnhancedInput isn't already in your project's module dependencies, add it to your Build.cs — otherwise the node compiles but reads no input at runtime.
Now drop a RotationConstraints node after it. Set PitchRange to (-40, 40) so the player can't look straight up or down into the floor.
6. Collision¶
Drop a CollisionPush node. This is the largest single node in the shipped set — it handles two collision modes simultaneously:
- Trace collision — a line/sphere trace from pivot to camera each frame; if something blocks it, the camera is pushed toward the pivot along the trace direction.
- Self collision — a sphere around the camera; if something overlaps it, the camera is pushed to the far side via a reverse sphere sweep from beyond the camera back toward the pivot.
Starting values:
TraceUseSphere = true,TraceSphereRadius=12.SelfSphereRadius=12.TraceCollisionChannel=Camera(orVisibility, depending on your project),SelfCollisionChannel = SelfCamera(depening on your project),- For both modes, the push/pull interpolators default to
IIRInterpolator. SetPushInterpolator.Speed = 10andPullInterpolator.Speed = 10— fast push on occlusion, slow return so the camera doesn't bounce.
7. Author FOV¶
Finally, drop a FieldOfView node. Set FieldOfView = 70. Wire its output into the Output node's Pose input.
8. Save and build¶
Ctrl+S. The asset header should show a green checkmark. If it's red, hover for the error — typically an unconnected exec pin or a dangling parameter reference.
The final graph looks like a straight pipeline: parameter → 8 nodes → Output.
9. Activate from Blueprint¶
Open your character Blueprint. On BeginPlay:
- Right-click → search Activate Camera. Place the node.
- Set Camera Type Asset =
CT_ThirdPersonFollow. The node rebuilds its pins — you'll see aFollow Targetpin appear (generated from your parameter). - Wire the character's
SelfintoFollow Target, andPlayer Index=0. - Connect the exec pin from
BeginPlay.
That's the entire activation path. Compile, play, and the camera snaps to your character with stick-driven orbit and collision-aware pushback.
Tuning notes¶
A few things to nudge once you see it running:
- Camera feels "sticky" behind the character — increase
HorizontalDamping.Y(deceleration time) onControlRotateNode, or lowerSoftLookAtWeightonLookAtNode. - Camera snaps through thin walls — you're relying on trace collision only. Enable self collision and increase
SelfCollisionRadiusuntil the camera stops poking through. - Pitch feels sluggish near the clamps —
RotationConstraintsis a hard clamp; if you want softer approach, author a custom node that smoothstops near the range endpoints, or set a wider pitch range and let content design the limit. - Camera jitters while the character is on a moving platform — add a second
PivotDampingafter the offset, and lower the spring damp time to~0.08. The source of the jitter is usually high-frequency root-bone motion during animation blends.
Where next¶
- Transitions & Blending — author an
EnterTransitiononCT_ThirdPersonFollowso activation blends in rather than snaps. - Modifiers — add a sprint-FOV-bump modifier that targets
FieldOfViewNodeon this camera's tag set. - Cutscene Context — the next tutorial, which pushes a cutscene over this camera and blends back to it cleanly.








