Cam Manager

How to work with the GS_PhantomCam manager — enabling and disabling the camera system, and responding to active camera changes.

The Cam Manager is the camera system’s singleton manager. It integrates with GS_Core’s standard manager lifecycle, handles the camera system’s startup and shutdown through the two-stage initialization sequence, and maintains awareness of which Phantom Camera is currently dominant. Any time the active camera changes, the Cam Manager broadcasts a notification so dependent systems can react without polling.

For architecture details, component properties, and extending the system in C++, see the Framework API reference.

Cam Manager component in the O3DE Inspector

 

Contents


Manager Lifecycle

The Cam Manager is a GS_ManagerComponent and participates in the standard GS_Core startup sequence. It activates alongside all other managers during the two-stage initialization, making it safe to call camera system methods any time after OnStartupComplete.

StageWhat Happens
InitializeCam Manager activates and registers with the camera pipeline.
Startup (OnSetupManagers)Manager is initialized. Safe to query camera state.
Complete (OnStartupComplete)All managers ready. Safe to enable or disable the camera system.

Enabling and Disabling the Camera System

The camera system can be suspended and resumed independently of other gameplay systems. This is used during UI-only states, loading screens, or when a cinematic takes direct control of the camera.

NotificationWhat It Does
EnableCameraSystemActivates the camera system. Phantom Cameras resume competing for priority.
DisableCameraSystemSuspends the camera system. The real camera stops receiving updates from Phantom Cameras.

Both events are on CamManagerNotificationBus. Broadcast them to switch the camera system state from any script or component.


Tracking the Active Camera

The Cam Manager broadcasts SettingNewCam on CamManagerNotificationBus whenever a different Phantom Camera becomes dominant. This fires any time a camera with higher priority activates, a dominant camera deactivates, or a blend resolves to a new target.

Use this event in any system that needs to know which camera is currently active — aiming reticles, world-space UI elements, minimaps, or audio listener positioning.

ScriptCanvas


Suspending the Camera System

ScriptCanvas

Broadcast DisableCameraSystem to suspend camera updates, for example when a cutscene takes direct camera control:

Because DisableCameraSystem and EnableCameraSystem are notifications rather than requests, they are fire-and-forget. Any script can broadcast them.


Changing the Camera Target

ScriptCanvas

The follow target, designated by the CamManager, can be set with Get/Set Target:


Three Authoring Tiers

The Cam Manager exposes three top-level fields that control how the camera system is configured for your project. Most single-player projects use Tier 1; multi-player or split-screen projects use Tier 3.

TierCam Manager configurationWhen to choose it
Tier 1 — Single Camm_primaryRigPrefab set, m_enableInstancedChannels = falseSingle-player projects with a normal camera rig. The default for most games.
Tier 2 — Level-placed CamCoreNo primary rig prefab, m_enableInstancedChannels = falseLegacy single-player flow where the Cam Core is hand-placed in each level.
Tier 3 — Multi-Channelm_enableInstancedChannels = true, m_channelConfigs populatedSplit-screen, local co-op, or cinematic projects that need per-player rigs and arbitration.

For the full step-by-step walkthrough of each tier — including common Tier 3 patterns (shared cinematic cams, hero-perspective cams, cross-channel dispatch) and the lobby flow for variable player counts — see the dedicated Channels page:

Channels & Instancing API


Cam Manager Entity Configuration

Cam Manager entity setup in the O3DE Editor

In Tier 1, assign your rig prefab (containing a Cam Core and any cams that should persist with the manager) to the Cam Manager’s Primary Rig Prefab field. The Cam Manager spawns the rig at startup.

In Tier 2, hand-place the Cam Core entity as a child of the Cam Manager. Any phantom cameras that should persist between stage changes can sit alongside the Cam Core.

In Tier 3, populate m_channelConfigs with one entry per supported player slot — see Channels & Instancing.

Across all tiers, the PossessedUnit event on a player controller is a convenient way to push the camera target the moment the player unit spawns.


Quick Reference

NeedBusMethod / Event
Enable the camera systemCamManagerNotificationBusEnableCameraSystem
Disable the camera systemCamManagerNotificationBusDisableCameraSystem
Set the camera target (single-player)CamManagerRequestBusSetTarget(playerEntityId)
Set a channel’s target (multi-channel)CamManagerRequestBusSetChannelTarget(channelId, entity)
Know when the active camera changes (single-player)CamManagerNotificationBusSettingNewCam(newCamEntityId)
Know when a channel’s active cam changes (multi-channel)CamManagerNotificationBusSettingNewCamOnChannel(channelId, cam)
Spawn / despawn a channel mid-sessionCamManagerRequestBusEnableChannel(id) / DisableChannel(id)
Set the engine’s active main viewCamManagerRequestBusSetActiveChannel(id) or SetActiveCamCore(camCore)

Glossary

TermMeaning
Cam ManagerThe singleton manager for the PhantomCam system that tracks active cameras and broadcasts changes
Dominant CameraThe Phantom Camera with the highest priority that currently drives the real camera

For full definitions, see the Glossary.


See Also

For the full API, component properties, and C++ extension guide:

For related systems:


Get GS_PhantomCam

GS_PhantomCam — Explore this gem on the product page and add it to your project.