Camera Actor
World cameras are instances of AOperatingSystemCCTVActor. The bundled BP_CCTV_Actor Blueprint adds a visible mesh and pre-wired Scene Capture Component 2D.
Plugin path:
OperatingSystemContent/Shared/Blueprints/Actors/CCTV/BP_CCTV_Actor
flowchart TB Actor["BP_CCTV_Actor"] Mesh["Static Mesh · camera body"] Capture["SceneCaptureComponent2D"] RT_Main["Main Render Target 2048×1024"] RT_Grid["Grid Render Target 512×256"] MID["Dynamic Material · Texture param"] Actor --> Mesh Actor --> Capture Capture --> RT_Main & RT_Grid RT_Main & RT_Grid --> MID
Placing in the level
Section titled “Placing in the level”- Drag BP_CCTV_Actor from plugin content into your level.
- Position and rotate so the capture component faces the monitored area.
- Ensure Start Activated is
true(default) so the actor registers on BeginPlay. - Set a unique Camera Name for each instance.
Cameras register with UOperatingSystemCCTVWorldSubsystem under a Group name. Empty group defaults to Default.
flowchart LR Cam1["Lobby · Group Default"] Cam2["Parking · Group Default"] Cam3["Vault · Group Secure"] Sub["UOperatingSystemCCTVWorldSubsystem"] Cam1 & Cam2 --> Sub Cam3 --> Sub Sub --> Map["CameraMap: Group → Camera set"]
Properties reference
Section titled “Properties reference”| Property | Default | Description |
|---|---|---|
| Start Activated | true | Calls Activate() on BeginPlay |
| Camera Name | auto Cam N | Shown in CCTV UI lists |
| Group | Default | Organize cameras for filtered queries |
| Zoom Adjust | 5 | FOV delta per zoom step |
| Min Max Zoom | 25 – 100 | FOV clamp (degrees) |
| Main View Size | 2048 × 1024 | Single-view render target resolution |
| Grid View Size | 512 × 256 | Per-tile resolution in grid layouts |
| Override Material UI | none | Per-camera material; falls back to project settings |
Advanced — Override Material UI
Section titled “Advanced — Override Material UI”Leave empty to use Project Settings → CCTV Settings → UI Material (M_UI_CCTV). Set per actor only when a specific feed needs a different scan-line or distortion effect.
Scene capture behavior
Section titled “Scene capture behavior”The capture component is tuned for performance:
| Setting | Value | Why |
|---|---|---|
| Capture Every Frame | false | Driven by program data tick |
| Capture On Movement | false | Avoids redundant captures |
| Capture Source | Final Tone Curve HDR | Matches in-game lighting |
| Always Persist Rendering State | true | Stable feeds between captures |
Captures run via Capture Scene Deferred when the CCTV program data object ticks (or on manual Capture Now).
sequenceDiagram participant Data as Program Data participant Cam as BP_CCTV_Actor participant SC as SceneCapture2D participant RT as Render Target Data->>Cam: Capture() Cam->>SC: CaptureSceneDeferred() SC->>RT: Write frame Note over RT: Widget reads via Get Main/Grid View MID
Camera groups in Blueprint
Section titled “Camera groups in Blueprint”Query cameras by group from the world subsystem:
Event BeginPlay (your security desk actor) → Get Operating System CCTV World Subsystem → Get Camera Group Names → Groups → Get Cameras From Group ("Secure") → Secure Cameras → For Each → Print Camera Name| Function | Returns |
|---|---|
Get Camera Group Names | All registered group names |
Get Cameras From Group | AOperatingSystemCCTVActor array for one group |
Camera Ids map | Stable int ID → camera actor |
Enable / disable feeds at runtime
Section titled “Enable / disable feeds at runtime”On Security Breach Resolved → Lobby Camera → Toggle State (true)
On Power Outage → For Each (All CCTV Actors) → Toggle State (false)Disabled cameras return nullptr from Get Main View MID / Get Grid View MID and skip capture calls.
On State Changed on the actor broadcasts the camera’s Camera Id — the CCTV widget’s On Camera State Changed event receives the same ID.
Zoom API
Section titled “Zoom API”| Function | Effect |
|---|---|
Zoom In | Decrease FOV by Zoom Adjust (clamp to min) |
Zoom Out | Increase FOV by Zoom Adjust (clamp to max) |
Reset Zoom | Restore FOV captured at BeginPlay |
Zoom only applies when the camera is enabled.
Blueprint example — spawn camera at runtime
Section titled “Blueprint example — spawn camera at runtime”Event Construct → Spawn Actor from Class (BP_CCTV_Actor) Transform: Security Cam Socket World Transform Camera Name: "Dynamic Cam 1" Start Activated: true → (Camera auto-registers on BeginPlay)Blueprint example — security zone filter
Section titled “Blueprint example — security zone filter”Use groups to show only exterior cameras in one UI tab:
Function Get Exterior Cameras → Get Operating System CCTV World Subsystem → Get Cameras From Group ("Exterior") → ReturnAssign Group = Exterior on outdoor BP_CCTV_Actor instances in the editor.
Performance tips
Section titled “Performance tips”| Cameras | Recommendation |
|---|---|
| 1–4 | FrameBased · Medium or Fast |
| 5–9 | FrameBased · Slow or VerySlow |
| Many feeds, low priority | TimeBased · Capture Time 0.5–1.0 s |
| Snapshot only | Manual + Capture Now on button press |
Lower Grid View Size (e.g. 256 × 128) when displaying nine feeds on a small in-game monitor mesh.
Related
Section titled “Related”- Setup — place cameras and test in PIE
- CCTV widget — bind feeds to UMG Images
- API — AOperatingSystemCCTVActor