OBS Trigger Volume
AInhyeongOBSTriggerVolume is a no-code way to automate OBS from gameplay. Place it in a level, give it a shape, configure when it fires, what actions it runs, and any conditions that must hold, all from the Details panel, no Blueprint required.
Placing a Trigger Volume
Drag an OBS Trigger Volume actor into the level (or spawn AInhyeongOBSTriggerVolume). It draws itself in the editor viewport so it’s easy to position. Set the shape and extents, then fill in the actions/conditions in the Details panel.
Shape
| Property | Type | Notes |
|---|---|---|
TriggerShape | EOBSTriggerShape | Box or Sphere. |
BoxExtent | FVector | Half-size in each direction (the box spans 2× in each axis). Shown when shape is Box. |
SphereRadius | float | Shown when shape is Sphere. |
Trigger Event Modes
TriggerEvent (EOBSTriggerEvent) controls when the volume fires:
| Mode | Behavior |
|---|---|
OnEnter | Fire when an actor enters the volume (runs OnEnterActions). |
OnExit | Fire when an actor exits the volume (runs OnExitActions). |
Both | Fire on both enter and exit, using the two separate action arrays. |
The OnEnterActions array is shown for OnEnter/Both, and OnExitActions for OnExit/Both.
Actions
Each action is an FOBSTriggerAction. Set ActionType and the relevant fields appear. The full action list (EOBSTriggerActionType):
| Action | Parameters used | Description |
|---|---|---|
SwitchScene | SceneName | Switch to a specific OBS scene. |
StartRecording | None | Start recording. |
StopRecording | None | Stop recording. |
ToggleRecording | None | Toggle recording state. |
PauseRecording | None | Pause recording. |
ResumeRecording | None | Resume recording. |
StartStreaming | None | Start streaming. |
StopStreaming | None | Stop streaming. |
ToggleStreaming | None | Toggle streaming state. |
StartVirtualCam | None | Start the virtual camera. |
StopVirtualCam | None | Stop the virtual camera. |
ToggleVirtualCam | None | Toggle the virtual camera. |
StartReplayBuffer | None | Start the replay buffer. |
StopReplayBuffer | None | Stop the replay buffer. |
SaveReplayBuffer | None | Save the replay buffer to file. |
SetInputMute | InputName, bMuted | Mute or unmute an audio input. |
SetInputVolume | InputName, VolumeDb | Set an input’s volume in dB (0 = unity, negative = quieter, clamped -100…26). |
ToggleInputMute | InputName | Toggle an input’s mute state. |
SetSceneItemEnabled | SceneName, SourceName, bEnabled | Show or hide a source (scene item) within a scene, by name. |
SetSourceFilterEnabled | SourceName, FilterName, bEnabled | Enable or disable a named filter on a source. |
TriggerHotkeyByName | HotkeyName | Fire an OBS hotkey by its registered name (e.g. OBSBasic.StartRecording). |
TriggerMediaInputAction | InputName, MediaAction | Drive a media source. |
MediaAction is an EOBSMediaInputAction: None, Play, Pause, Stop, Restart, Next, Previous.
Each action also has a DelaySeconds (per-action delay, clamped ≥ 0).
In the editor, an action’s target fields are live-OBS dropdowns while connected: scene, input, and source pickers, plus a per-source Filter picker and a Hotkey picker (fetched on demand when you open them). The chosen names are stored on the action, so they persist after you disconnect.
Conditions
All conditions are evaluated as a logical AND, meaning every enabled condition must pass for actions to execute. An OBS connection is always required and checked internally. Conditions live in FOBSTriggerConditions:
Recording / Streaming requirements (tri-state)
| Property | Type | Values |
|---|---|---|
RecordingRequirement | EOBSOutputStateRequirement | Any / Required (must be recording) / Disallowed (must NOT be recording) |
StreamingRequirement | EOBSOutputStateRequirement | Any / Required / Disallowed |
A single tri-state per output makes “must be on” and “must be off” structurally impossible to set at once.
Scene conditions
| Property | Type | Notes |
|---|---|---|
RequiredCurrentScene | FString | Only trigger if the current OBS scene matches this name (empty = any scene). |
ExcludedCurrentScene | FString | Only trigger if the current OBS scene does not match this name (empty = disabled). |
Chosen from live-OBS scene dropdowns in the editor.
Audio threshold conditions
AudioConditions is a TArray<FOBSAudioThresholdCondition>. Add any number, and all must pass.
| Field | Type | Notes |
|---|---|---|
InputName | FString | OBS input to test (e.g. Mic/Aux). Empty = condition ignored. |
Mode | EOBSAudioConditionMode | Talking or Idle. |
ThresholdDb | float | Peak-dB threshold for the auto-registered detector (default -40, clamped -100…0). |
These use the same debounced mic-activity detection described in Mic / Voice Activity Detection. Each input is auto-registered for detection at BeginPlay.
Source visibility conditions
SourceVisibleConditions is a TArray<FOBSSourceVisibleCondition>. All must pass.
| Field | Type | Notes |
|---|---|---|
SceneName | FString | Scene containing the source. Empty = condition ignored. |
SourceName | FString | Source (scene item) whose visibility is tested. Empty = condition ignored. |
Mode | EOBSVisibilityConditionMode | Visible or Hidden. |
Reads the live bSceneItemEnabled cache. A source not found in the cache (typo, wrong scene, or list not yet fetched) fails the condition.
The Details panel renders audio and visibility conditions with name pickers (populated from OBS while connected) plus a live status dot, so you can watch talking/visible state update in real time as you author the volume.
Trigger Filters & Options
| Property | Type | Notes |
|---|---|---|
ActorClassFilter | TSubclassOf<AActor> | Only actors of this class (or children) can trigger. Default AActor allows anything. Set to APawn for player-only, etc. |
SpecificActorFilter | TSoftObjectPtr<AActor> | Only this exact actor can trigger. If set, ActorClassFilter is ignored. |
CooldownSeconds | float | Cooldown between triggers (prevents spam on volume edges). |
bTriggerOnce | bool | Fire once, then disable. |
bTriggerEnabled | bool | Whether the trigger is currently enabled. |
Runtime helpers: SetTriggerEnabled(bool), ResetTrigger() (re-enables a one-shot trigger), ExecuteEnterActions(), ExecuteExitActions(), ExecuteActions(Actions), AreConditionsMet(), HasValidOBSConnection(), GetActiveOBSComponent(). Events OnTriggerEnter / OnTriggerExit fire as actions are about to execute.
Appearance / Visualization
The volume draws itself in the editor viewport (and optionally during play) so it’s easy to place and read. Properties (category OBS Trigger | Appearance):
| Property | Type | Notes |
|---|---|---|
bShowDebugInEditor | bool | Draw the volume in the editor viewport. |
bShowAtRuntime | bool | Also draw during play (PIE / packaged development). Compiled out of Shipping. |
bDrawSolid | bool | Translucent fill in addition to the wireframe (box only, where the alpha of the color drives the fill). |
LineThickness | float | Wireframe thickness (0 = thinnest), hard-capped at 10. |
DebugColor | FColor | Color of the draw (and the styled mesh). |
bShowActionLabel | bool | Float a one-line action summary above the volume (e.g. Enter: BRB). Follows the same show flags. |
bHideBillboard | bool | Hide the editor selection sprite (editor-only). |
VolumeStyle | EOBSTriggerVolumeStyle | Optional material-rendered look that also shows in-game: None, Glow (Fresnel Glow), Hologram, Pulse (presets backed by shipped switch-materials), or Custom. |
StyleMaterial | UMaterialInterface* | Your own material for the styled mesh (used only when VolumeStyle = Custom). Receives a Color parameter from the Volume Color. |
Connection Fallback
The trigger resolves its OBS connection in this order:
TargetOBSComponent: the explicitly-assigned OBS Component, if set.- Level search: a cached OBS Component found in the level (
CachedOBSComponent). - Subsystem: the global OBS Subsystem.
If a
TargetOBSComponentis set but cannot be resolved, the trigger silently falls back to the Subsystem.
Example Use Cases
Highlight Replay
- Trigger:
OnEnter - Condition:
RecordingRequirement = Required - Action:
SaveReplayBuffer
Scene Switching
- Trigger:
OnEnter - Action:
SwitchScene→ “Boss Arena”
Audio Zones
- Trigger:
Both - Enter action:
SetInputMute“Background Music” (bMuted = true) - Exit action:
SetInputMute“Background Music” (bMuted = false)
Gotchas
Conditions are all-AND. Every enabled condition must pass, and an OBS connection is always required on top of them.
Delayed actions are uncancellable. An action with
DelaySeconds > 0still fires even if the triggering actor has already left the volume.
Audio actions need exact OBS input names. A mismatched input name fails silently. Use the editor’s live dropdowns to avoid typos.