How-To: Switch Camera Modes

Goal: change which camera mode is active - either by pushing/popping overrides on events, or by selecting a mode from game state every frame.

Prerequisites
You completed Quick Start (a working third-person mode).

Option A - Push / pop on events (recommended)

Push an override when something starts (aim, mount, cutscene) and pop it when it ends. Each override is keyed by an owner tag: re-pushing with the same tag replaces it, popping with the same tag removes it. The most-recently-pushed override wins. This works identically in Blueprint and C++.

On the pawn that owns the camera component, take one Enhanced Input action and use both of its pins. Input Action (Aim), Triggered -> Get Crimson Camera Component (drag the component in from My Blueprint -> Components) -> Push Camera Mode (Camera Mode Class = your aim mode, Owner Tag = Camera.Mode.Aim). Input Action (Aim), Completed -> Get Crimson Camera Component (drag the component in from My Blueprint -> Components) -> Pop Camera Mode (Owner Tag = Camera.Mode.Aim). The identical tag on both halves is what lets the pop remove exactly that push and nothing else.

Verify
Holding aim blends to the aim mode; releasing blends back to the underlying mode.

Option B - Select per frame from state

When no override is active, the component asks Determine Camera Mode every tick which mode to run. Override it to return a mode class computed from game state. Overrides (Option A) still take precedence when present.

Create a Blueprint subclass of Crimson Camera Component and put that on your pawn instead of the base component. Open it, and in My Blueprint -> Functions click Override and choose Determine Camera Mode. In the graph that opens: Determine Camera Mode -> Branch (Condition = your aiming / mounted / cutscene bool) -> Return Node, with Return Value set to your aim mode class on True and your default mode class on False. Returning nothing is fine - the stack simply keeps whatever is already active.

Override needs a component subclass
Determine Camera Mode is overridden on the component, so add a Blueprint subclass of Crimson Camera Component to your pawn (rather than the base component) to override it. If you can't swap the component, use Option A (Push Camera Mode) - it needs no subclass.
Blueprint vs C++
Blueprint overrides the Determine Camera Mode event; C++ can instead bind DetermineCameraModeDelegate. The event's default implementation runs the delegate, so both paths coexist.

See also

  • Concept: Selection & Overrides - precedence, the override stack, and when to use each option.
  • Concept: The Mode Stack - how blend time, function, and weight shape transitions.