-
Notifications
You must be signed in to change notification settings - Fork 8
OccludedEmitter
Guribo edited this page Jul 12, 2026
·
2 revisions
Packages/tlp.udonvoiceutils/Runtime/Core/WorldAudio/OccludedEmitter.cs
Per-emitter audio lifecycle controller for the WorldAudio system.
OccludedEmitter manages a single AudioSource in the WorldAudio system. Each emitter:
- Registers itself with the
EmitterRegistryon startup - Calculates its own importance (distance, volume, priority)
- Applies reverb and lowpass filter based on distance and clarity
- Gets culled (suspended) when beyond
MaxActiveSourcesor privacy-gated - Deactivates its GameObject when culled (if configured)
One per AudioSource that should be managed by the WorldAudio system.
| Component | Required |
|---|---|
AudioSource |
Yes |
ReverbController |
Yes (added automatically) |
AudioSourceStateController |
Yes (added automatically) |
| Field | Default | Description |
|---|---|---|
DisableGameObjectWhenCulled |
true |
Deactivate GameObject when culled. Set to false for Unity videoplayer sources — disabling breaks audio in combination with private channels |
PrivacyChannelId |
-1 |
Privacy channel. -1 = no privacy (always audible). Players whose override shares this channel can hear it |
-
Startup — registers with
EmitterRegistry -
Importance updates —
WorldAudioControllerperiodically recalculates this emitter's importance -
Per-frame update —
WorldAudioControllerupdates this emitter with cull/clarity info - Culling — when culled, suspends playback and deactivates GameObject (if configured)
- Reactivation — when active again, reactivates GameObject and resumes playback
-
Destruction — unregisters from
EmitterRegistry
| Local Override | Emitter Channel | Result |
|---|---|---|
| Any |
-1 (NoPrivacy) |
Audible (unless local override mutes outsiders) |
| Channel X | Channel X | Audible (unless DisallowListeningToChannel is set) |
| Channel X | Channel Y | Culled |
| None | Any except -1
|
Culled |
| None | -1 |
Audible |
Do not directly control the AudioSource (Play/Pause/Stop/clip changes) when it is managed by this component. All
control must go through AudioSourceStateController. Direct manipulation conflicts with culling and importance sorting.
Only works with Unity-based video players. Does not work with AVPro. Use Unity's built-in video player if you need WorldAudio to manage the audio.
- WorldAudioController — drives the update loop that manages this emitter
- ReverbController — manages reverb/lowpass on the same AudioSource
- AudioSourceStateController — manages play/pause/cull state
- EmitterRegistry — tracks this emitter in the importance system
- Architecture
- Occlusion
- Voice Directionality
- Height Scaling
- Audio Processing Pipeline
- Private Voice Channels
- WorldAudio Subsystem
- WorldAudio Limitations
- Set Up Occlusion
- Set Up Voice Channels
- Set Up Reverb
- Set Up Height Scaling
- Set Up Voice Directionality
- Set Up Microphone
- Set Up WorldAudio Emitters
- Enable Debug Mode
- Tutorial #1: Custom Voice Override Zone
- Tutorial #2: Private Voice Channels
- Tutorial #3: Setting Up World Audio
- PlayerAudioController
- PlayerAudioOverride
- PlayerAudioOverrideList
- PlayerAudioView
- PlayerAudioConfigurationModel
- SyncedPlayerAudioConfigurationModel
- VoiceUtils
- IgnoredPlayers
- AudioObstacle
- DefaultPlayerOcclusion
- NullPlayerOcclusion
- PlayerOcclusionStrategy
- Privacy Channel Reference
- AdjustableGain
- DynamicPrivacy
- PickupMicrophone — MVC microphone system with MicModel/MicController/MicView
- VoiceOverrideTriggerZone
- VoiceOverrideRoom