133 — Room Audio Zone (BP_RoomAudioZone)
Purpose
A trigger volume placed in the world that automatically switches the audio reverb/occlusion profile when the player enters. When the player exits, it restores the previous room preset via a push/pop stack in SS_AudioManager. Supports nested room zones (room within building within cave) with priority-based override.
Dependencies
- Requires:
SS_AudioManager (132 — calls SetRoomPreset / PopRoomPreset on overlap), DA_RoomAcousticPreset (135 — assigned acoustic profile)
- Required By: Level Designers (placed in world)
- Engine/Plugin Requirements: MetaSounds plugin (for room reverb pipeline)
Class Info
| Property |
Value |
| Parent Class |
TriggerVolume (or Actor with BoxComponent) |
| Class Type |
Blueprint Actor |
| Asset Path |
Content/Framework/Audio/BP_RoomAudioZone.uasset |
| Implements Interfaces |
(none) |
1. Enums
Uses enums defined elsewhere:
E_AudioBusCategory — from SS_AudioManager (132)
2. Structs
Uses struct defined in SS_AudioManager (132):
S_RoomAcousticProfile — acoustic profile fields (reverb density, decay time, wet level, etc.)
3. Variables
Configuration (Instance Editable, Expose On Spawn)
| Variable |
Type |
Default |
Category |
Description |
RoomPreset |
DA_RoomAcousticPreset |
None |
Room Config |
Acoustic profile for this room |
TransitionTime |
Float |
1.5 |
Room Config |
Crossfade duration on enter (seconds) |
ExitTransitionTime |
Float |
1.0 |
Room Config |
Crossfade duration on exit (seconds) |
bOverrideOcclusion |
Boolean |
false |
Room Config |
Override occlusion settings in this zone |
OcclusionTraceChannel |
ETraceTypeQuery |
Camera |
Room Config |
Trace channel for per-source occlusion |
Priority |
Integer |
0 |
Room Config |
Higher priority zones override lower (for nested rooms) |
bIsActive |
Boolean |
true |
State |
Whether this room zone is actively processing |
ZoneDebugColor |
LinearColor |
Cyan |
Debug |
Color of the trigger volume in editor for visual identification |
bShowDebugInfo |
Boolean |
false |
Debug |
Print room zone enter/exit to log |
Internal (Private)
| Variable |
Type |
Default |
Category |
Description |
bPlayerInside |
Boolean |
false |
State |
Whether the player is currently inside this zone |
4. Functions
Public Functions
SetRoomAudioEnabled → void
- Description: Toggle room audio processing. Used for narrative lock, void space override.
- Parameters:
| Param |
Type |
Description |
bEnabled |
Boolean |
True to enable, false to disable zone processing |
- Blueprint Authority: Any
- Flow:
- Set
bIsActive = bEnabled
- If
bEnabled == false and bPlayerInside: force PopRoomPreset on SS_AudioManager
- If
bEnabled == true and bPlayerInside: re-apply SetRoomPreset
GetPriority → Integer
- Description: Returns the zone priority. Used by
SS_AudioManager for nested zone resolution.
- Parameters: (none)
- Blueprint Authority: Any (Pure)
GetAcousticProfile → DA_RoomAcousticPreset
- Description: Returns the assigned room acoustic preset.
- Parameters: (none)
- Blueprint Authority: Any (Pure)
5. Event Dispatchers
| Dispatcher |
Parameters |
Bind Access |
Description |
OnPlayerEnteredZone |
ZoneName: FName |
Public |
Fired when player enters (for gameplay logic) |
OnPlayerExitedZone |
ZoneName: FName |
Public |
Fired when player exits |
OnZoneEnabledChanged |
bEnabled: Boolean |
Public |
Fired when SetRoomAudioEnabled is called |
6. Overridden Events / Custom Events
Event: OnActorBeginOverlap
- Description: Detects player character entering the trigger volume → calls
SS_AudioManager.SetRoomPreset().
- Flow:
- Validate
OtherActor — is it the player character? (check tag Player or cast to BP_PlayerCharacter)
- If not player: return
- If
!bIsActive: return
- Set
bPlayerInside = true
- Get
SS_AudioManager from Game Instance
- Call
SS_AudioManager.SetRoomPreset(RoomPreset) with TransitionTime
- Fire
OnPlayerEnteredZone
- If
bShowDebugInfo: log zone name to console
Event: OnActorEndOverlap
- Description: Player exits → restore previous room preset via
SS_AudioManager.PopRoomPreset().
- Flow:
- Validate
OtherActor — is it the player?
- If not player: return
- If
!bIsActive: return
- Set
bPlayerInside = false
- Get
SS_AudioManager from Game Instance
- Call
SS_AudioManager.PopRoomPreset() (restores previous room from stack)
- Fire
OnPlayerExitedZone
- If
bShowDebugInfo: log to console
Event: BeginPlay
- Description: Register this zone with a global zone manager if one exists. Configure trigger volume collision settings.
- Flow:
- Configure trigger volume:
SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap)
- Set
Generate Overlap Events = true
- Optionally set trigger volume color from
ZoneDebugColor
- If
RoomPreset is null: log warning, set bIsActive = false
Event: EndPlay
- Description: Cleanup — if player is inside zone on destruction, force pop the room preset.
- Flow:
- If
bPlayerInside: call SS_AudioManager.PopRoomPreset()
- Set
bPlayerInside = false
7. Blueprint Graph Logic Flow
Nested Room Zone Stack
8. Room Preset Reference
Included Room Presets (in Content/Framework/Audio/RoomPresets/)
| Preset Asset |
Description |
Typical Use |
DA_RoomAcousticPreset |
Base class |
Parent for all presets |
DA_RP_SmallRoom |
Small room reverb |
Offices, bedrooms, closets |
DA_RP_LargeHall |
Large hall reverb |
Auditoriums, churches, lobbies |
DA_RP_Outdoor |
Outdoor (minimal reverb) |
Default fallback, streets, forests |
DA_RP_Cave |
Cave/underground reverb |
Caves, tunnels, basements |
DA_RP_VoidSpace |
Void/alt death space reverb |
Alt death space, dream sequences |
DA_RP_Industrial |
Industrial/factory reverb |
Factories, warehouses, hangars |
DA_RP_Bathroom |
Small tile reverb |
Bathrooms, tiled corridors |
9. Communication Matrix
| Who Talks |
How |
What Is Sent |
BP_RoomAudioZone |
SS_AudioManager.SetRoomPreset() |
DA_RoomAcousticPreset, crossfade time |
BP_RoomAudioZone |
SS_AudioManager.PopRoomPreset() |
(none — restores previous from stack) |
BP_RoomAudioZone |
Dispatcher: OnPlayerEnteredZone |
FName ZoneName (for gameplay scripting) |
BP_RoomAudioZone |
Dispatcher: OnPlayerExitedZone |
FName ZoneName |
| Level Designer |
Direct placement in world |
Adjusts RoomPreset, Priority, TransitionTime in Details Panel |
| Narrative System |
SetRoomAudioEnabled(false) |
Disables zone during cutscenes/void space |
10. Validation / Testing Checklist
11. Reuse Notes
- Place multiple
BP_RoomAudioZone actors throughout a level to create realistic acoustic transitions.
- Use
Priority to handle overlapping zones — higher values override. Example: a bathroom (Priority=5) inside a house (Priority=0).
bOverrideOcclusion enables per-source occlusion line traces in this zone — useful for walls, doors.
- The
OnPlayerEnteredZone / OnPlayerExitedZone dispatchers allow gameplay logic to react to room changes (e.g., "You've entered the forbidden wing" audio sting).
- Zone scaling: Box components can be scaled to any size. Use multiple zones for irregularly shaped rooms.
- Debug mode (
bShowDebugInfo + ZoneDebugColor) helps level designers visualize acoustic boundaries.
Blueprint Spec: BP_RoomAudioZone — Trigger volume for automatic room acoustic switching. Architecture document: metasounds-audio-system.md Section 6.