How-To: Aim Over the Shoulder & Zoom

Goal: swap the camera between center and over-the-shoulder framing, and dolly the camera in/out - from input. Shoulder and zoom are camera-wide: you call them on UCrimsonCameraComponent, and every third-person-derived mode (third-person, aim, lock-on) reflects the same value.

Prerequisites
Your active mode is a UCrimsonCameraMode_ThirdPerson subclass (Quick Start step 4). No mode-instance fetching needed - shoulder and zoom live on the component, not the mode.

1. Swap the shoulder

Call Toggle Shoulder on the component to flip Left/Right, or Set Shoulder to pick a side (Right, Left, or Center). The lateral framing magnitude comes from the mode's offset-curve Y; the shoulder mirrors it - Right keeps it as authored, Left negates it, Center zeroes it.

On shoulder input: get the Crimson Camera Component -> Toggle Shoulder (or Set Shoulder = Right/Left/Center).
Verify
With the mode's offset-curve Y = 45, Right frames at +45 and Left at -45 - a clean mirror. The camera sweeps smoothly through center on a swap (interpolated by ShoulderInterpSpeed on the component).

2. Dolly the zoom

Call Add Zoom Distance (e.g. from a mouse-wheel axis) or Set Zoom Distance (absolute) on the component. The value is clamped to the component's [MinZoomDistance, MaxZoomDistance] and dollies the camera along its boom.

On zoom axis: get the Crimson Camera Component -> Add Zoom Distance (Delta = axis * step).
Verify
The camera dollies in/out and holds its distance when you switch modes - zoom carries across third-person, aim, and lock-on.
Shoulder & zoom carry across modes
Because both live on the component, switching modes (aim, lock-on) keeps your current shoulder and zoom automatically - no per-mode carry-over code. See Concept: Shared Camera State.
Make a mode ignore shoulder or zoom
Set bUseShoulderOffset = false or bUseZoom = false on a UCrimsonCameraMode_ThirdPerson subclass to hold a fixed framing for that mode (e.g. a cinematic or fixed-aim view). Tune the shared limits - ShoulderInterpSpeed, MinZoomDistance, MaxZoomDistance, ZoomInterpSpeed - on the component.

See also

  • Concept: Shared Camera State - why shoulder and zoom live on the component, not the mode.
  • How-To: Expose Camera Options as User Settings - surface FOV / zoom to a player options menu.