Setup
This walkthrough takes you from zero to a working security desk inside your virtual OS. You will place cameras in the level, add BP_Prog_CCTV to your operating system, and open the monitoring app at runtime.
flowchart LR A["1. Enable plugin content"] --> B["2. Place BP_CCTV_Actor"] B --> C["3. Add BP_Prog_CCTV to OS"] C --> D["4. PIE — launch CCTV app"]
1. Prerequisites
Section titled “1. Prerequisites”- Enable Operating System Simulator (v3.7.0+) in Edit → Plugins.
- In the Content Browser, enable Show Plugin Content and Show Engine Content.
- Confirm OperatingSystemCCTV module loads (no compile errors after updating the plugin).
→ Full checklist: Prerequisites
2. Project Settings (optional)
Section titled “2. Project Settings (optional)”Open Project Settings → CCTV Settings and verify UI Material points to:
OperatingSystemContent/CCTV/M_UI_CCTV
This material receives the Texture parameter from each camera’s render target. You can override it per camera — see CCTV settings.
3. Place cameras in the level
Section titled “3. Place cameras in the level”- Open your gameplay level (the same map where your
AOperatingSystemDeviceActorlives). - From plugin content, drag BP_CCTV_Actor into the viewport.
- Rotate the actor so the Scene Capture component faces the area you want monitored.
- Duplicate for additional feeds (hallway, entrance, server room, etc.).
- Set Camera Name on each instance (e.g.
Lobby,Parking) — empty names auto-fill asCam 1,Cam 2, …
flowchart TB subgraph level["Your level"] Device["AOperatingSystemDeviceActor"] CamA["BP_CCTV_Actor · Lobby"] CamB["BP_CCTV_Actor · Parking"] end Device --- level CamA -->|"SceneCaptureComponent2D"| ViewA["Captures lobby geometry"] CamB -->|"SceneCaptureComponent2D"| ViewB["Captures parking geometry"]
Minimum camera properties
Section titled “Minimum camera properties”| Property | Recommended | Notes |
|---|---|---|
| Start Activated | true | Registers with UOperatingSystemCCTVWorldSubsystem on BeginPlay |
| Group | Default (or custom) | Filter cameras by group in Blueprint |
| Main View Size | 2048 × 1024 | Single-camera fullscreen feed |
| Grid View Size | 512 × 256 | Multi-camera grid tiles |
→ Deep dive: Camera actor
4. Register CCTV on your operating system
Section titled “4. Register CCTV on your operating system”CCTV must be listed on your OS program collection so players can launch it from the desktop or Start menu.
Option A — Pre-installed (Must Have Programs)
Section titled “Option A — Pre-installed (Must Have Programs)”- Duplicate
DA_NonUnix_ProgramsCollectionfromOperatingSystemContent/NonUnix/Blueprints/into your project Content folder. - Open your duplicate and add BP_Prog_CCTV to Must Have Programs.
- Assign that collection on your OS Blueprint (Must Have Programs property).
flowchart LR OS["BP_Tut_OS"] --> PC["DA_My_ProgramsCollection"] PC -->|"Must Have Programs"| CCTV["BP_Prog_CCTV"] PC --> Other["BP_Prog_Mail · …"]
Option B — Store install
Section titled “Option B — Store install”Add BP_Prog_CCTV to your Store catalog Data Asset instead if you want players to install CCTV like optional software.
→ Create an operating system · Full device stack
5. Verify program defaults
Section titled “5. Verify program defaults”Open BP_Prog_CCTV (data-only view). C++ sets most properties; your Blueprint child only needs Widget Class and Data Class wired:
| Property | Expected value |
|---|---|
| Identifier | cctv |
| Data Class | BP_Prog_CCTVData |
| Widget Class | WBP_CCTV |
| Save Method | DoNotSave |
| Start Window State | StartMaximized |
| Can Run On Portable Device | true |
| Initial Layout | SingleView |
| Capture Method | FrameBased |
| Capture Speed | Medium (every 30 frames) |
6. Play-in-editor test
Section titled “6. Play-in-editor test”sequenceDiagram
participant Player
participant OS as Virtual OS
participant CCTV as BP_Prog_CCTV
participant Data as BP_Prog_CCTVData
participant Cam as BP_CCTV_Actor
Player->>OS: Boot device / login
Player->>OS: Launch CCTV
OS->>CCTV: OnStart
CCTV->>Data: ShouldCreate — find cameras in world
Data->>Cam: SetupId · register feeds
loop Every 30 frames
Data->>Cam: Capture deferred
Cam-->>Data: Render target updated
end
Player->>OS: Views live feed in WBP_CCTV
- Press Play on your level.
- Interact with the device and log in.
- Launch CCTV from the desktop or Start menu.
- You should see the active camera feed. If multiple cameras exist, use the widget’s layout controls (wired in WBP_CCTV) to switch between single and grid views.
Troubleshooting
Section titled “Troubleshooting”| Symptom | Fix |
|---|---|
| CCTV app does not appear | BP_Prog_CCTV missing from your programs collection |
| Black or empty feed | No BP_CCTV_Actor in level, or Start Activated is false |
ERR_DATA_NULL for BP_Prog_CCTV | No cameras in level when OS boots — see Troubleshooting: CCTV |
| Low FPS with many cameras | Switch Capture Method to FrameBased with Slow or VerySlow speed |
7. Next steps
Section titled “7. Next steps”| Goal | Guide |
|---|---|
| Custom monitoring UI | CCTV widget |
| Camera groups & zoom | Camera actor |
| Runtime layout / capture API | CCTV program |
| Swapping scan-line material | CCTV settings |