Skip to content

Desuq Cafe

Documentation menu

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

PropertyTypeNotes
TriggerShapeEOBSTriggerShapeBox or Sphere.
BoxExtentFVectorHalf-size in each direction (the box spans 2× in each axis). Shown when shape is Box.
SphereRadiusfloatShown when shape is Sphere.

Trigger Event Modes

TriggerEvent (EOBSTriggerEvent) controls when the volume fires:

ModeBehavior
OnEnterFire when an actor enters the volume (runs OnEnterActions).
OnExitFire when an actor exits the volume (runs OnExitActions).
BothFire 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):

ActionParameters usedDescription
SwitchSceneSceneNameSwitch to a specific OBS scene.
StartRecordingNoneStart recording.
StopRecordingNoneStop recording.
ToggleRecordingNoneToggle recording state.
PauseRecordingNonePause recording.
ResumeRecordingNoneResume recording.
StartStreamingNoneStart streaming.
StopStreamingNoneStop streaming.
ToggleStreamingNoneToggle streaming state.
StartVirtualCamNoneStart the virtual camera.
StopVirtualCamNoneStop the virtual camera.
ToggleVirtualCamNoneToggle the virtual camera.
StartReplayBufferNoneStart the replay buffer.
StopReplayBufferNoneStop the replay buffer.
SaveReplayBufferNoneSave the replay buffer to file.
SetInputMuteInputName, bMutedMute or unmute an audio input.
SetInputVolumeInputName, VolumeDbSet an input’s volume in dB (0 = unity, negative = quieter, clamped -100…26).
ToggleInputMuteInputNameToggle an input’s mute state.
SetSceneItemEnabledSceneName, SourceName, bEnabledShow or hide a source (scene item) within a scene, by name.
SetSourceFilterEnabledSourceName, FilterName, bEnabledEnable or disable a named filter on a source.
TriggerHotkeyByNameHotkeyNameFire an OBS hotkey by its registered name (e.g. OBSBasic.StartRecording).
TriggerMediaInputActionInputName, MediaActionDrive 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)

PropertyTypeValues
RecordingRequirementEOBSOutputStateRequirementAny / Required (must be recording) / Disallowed (must NOT be recording)
StreamingRequirementEOBSOutputStateRequirementAny / Required / Disallowed

A single tri-state per output makes “must be on” and “must be off” structurally impossible to set at once.

Scene conditions

PropertyTypeNotes
RequiredCurrentSceneFStringOnly trigger if the current OBS scene matches this name (empty = any scene).
ExcludedCurrentSceneFStringOnly 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.

FieldTypeNotes
InputNameFStringOBS input to test (e.g. Mic/Aux). Empty = condition ignored.
ModeEOBSAudioConditionModeTalking or Idle.
ThresholdDbfloatPeak-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.

FieldTypeNotes
SceneNameFStringScene containing the source. Empty = condition ignored.
SourceNameFStringSource (scene item) whose visibility is tested. Empty = condition ignored.
ModeEOBSVisibilityConditionModeVisible 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

PropertyTypeNotes
ActorClassFilterTSubclassOf<AActor>Only actors of this class (or children) can trigger. Default AActor allows anything. Set to APawn for player-only, etc.
SpecificActorFilterTSoftObjectPtr<AActor>Only this exact actor can trigger. If set, ActorClassFilter is ignored.
CooldownSecondsfloatCooldown between triggers (prevents spam on volume edges).
bTriggerOnceboolFire once, then disable.
bTriggerEnabledboolWhether 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):

PropertyTypeNotes
bShowDebugInEditorboolDraw the volume in the editor viewport.
bShowAtRuntimeboolAlso draw during play (PIE / packaged development). Compiled out of Shipping.
bDrawSolidboolTranslucent fill in addition to the wireframe (box only, where the alpha of the color drives the fill).
LineThicknessfloatWireframe thickness (0 = thinnest), hard-capped at 10.
DebugColorFColorColor of the draw (and the styled mesh).
bShowActionLabelboolFloat a one-line action summary above the volume (e.g. Enter: BRB). Follows the same show flags.
bHideBillboardboolHide the editor selection sprite (editor-only).
VolumeStyleEOBSTriggerVolumeStyleOptional material-rendered look that also shows in-game: None, Glow (Fresnel Glow), Hologram, Pulse (presets backed by shipped switch-materials), or Custom.
StyleMaterialUMaterialInterface*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:

  1. TargetOBSComponent: the explicitly-assigned OBS Component, if set.
  2. Level search: a cached OBS Component found in the level (CachedOBSComponent).
  3. Subsystem: the global OBS Subsystem.

If a TargetOBSComponent is 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 > 0 still 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.

See Also