Concept: Mode Selection & Overrides

Two mechanisms decide the active mode. Understanding their precedence avoids surprises when several systems want the camera.

Precedence (highest first)

SourceMechanismUse for
Override stackPushCameraMode(Class, OwnerTag) / PopCameraMode(OwnerTag)Event-driven takeovers (aim, lock-on, cutscene). Most-recently-pushed wins (LIFO).
Per-tick selectionDetermine Camera Mode event (default = DetermineCameraModeDelegate)The base mode computed from state when no override is active.

Each override is keyed by an owner tag so independent systems never clobber each other: re-pushing a tag updates it in place, popping a tag removes only that entry. Lock-on, for instance, pushes with its own tag and pops on release - restoring whatever was underneath.

Blueprint vs C++ selection
Overrides are fully Blueprint- and C++-callable. Per-tick selection is the Determine Camera Mode BlueprintNativeEvent (override in a component subclass) whose default runs the C++ DetermineCameraModeDelegate. A return-value delegate can't be a Blueprint-assignable (multicast) delegate, which is why the event wraps it.