-
Notifications
You must be signed in to change notification settings - Fork 8
Tutorial #2 Setting up private voice channels
Guribo edited this page Jul 11, 2026
·
4 revisions
This tutorial walks through setting up private voice channels. Players in one room cannot hear players in another room.
You will learn how to:
- Set up the base scene
- Create two private rooms with isolated channels
- Test with multiple players
- Installation complete
- Basic Unity knowledge
-
Create a new Unity scene
-
Add TLP_Essentials prefab:
- Search
TLP_in Project window → filter In Packages - Drag
TLP_Essentialsinto hierarchy - Path:
Packages/tlp.udonutils/Runtime/Prefabs/TLP_Essentials.prefab
- Search
-
Add TLP_PlayerAudioController prefab:
- From same search results, drag
TLP_PlayerAudioControllerinto hierarchy - Path:
Packages/tlp.udonvoiceutils/Runtime/Prefabs/Core/TLP_PlayerAudioController.prefab
- From same search results, drag
-
Drag the VoiceOverrideTriggerZone prefab into your scene:
- Path:
Packages/tlp.udonvoiceutils/Runtime/Prefabs/Examples/VoiceOverrideTriggerZone.prefab - This prefab already contains everything on one GameObject:
- BoxCollider (trigger)
- VoiceOverrideTriggerZone script (handles player enter/exit)
- PlayerAudioOverride component
- Canvas with label showing channel info
- MeshFilter + MeshRenderer (visible room volume — can be hidden)
- Path:
-
Select the
VoiceOverrideTriggerZonein hierarchy -
Find the PlayerAudioOverride component in the Inspector
-
In Privacy Settings, set Privacy Channel Id to
1- This makes it a private channel (ID 1)
Tip: The prefab comes with a visible mesh and UI label for debugging. To hide them:
- Disable the Mesh Renderer component to make the trigger invisible
- Disable the Canvas GameObject to hide the channel info text
- The trigger still works — only the visuals are hidden
- Duplicate the VoiceOverrideTriggerZone (Ctrl+D)
- Move it to the side (e.g., 10 units on X)
- Select the duplicate
- Find the PlayerAudioOverride component
- Change Privacy Channel Id to
2- Different ID = different channel (Room A players can't hear Room B)
- Build and test with 2 VRChat instances
- One player joins channel 1, another joins channel 2
- Players in different channels cannot hear each other
The VoiceOverrideTriggerZone prefab combines everything on one GameObject:
VoiceOverrideTriggerZone
├─ BoxCollider (IsTrigger)
├─ VoiceOverrideTriggerZone script
│ └─ OnPlayerTriggerEnter → AddPlayer to override
│ └─ OnPlayerTriggerExit → RemovePlayer from override
├─ PlayerAudioOverride
│ └─ PrivacyChannelId = channel number
│ └─ MuteOutsiders = true
└─ Canvas (label showing channel info)
When a player enters the trigger:
- VoiceOverrideTriggerZone calls
AddPlayeron PlayerAudioOverride - PlayerAudioOverride assigns the player to the channel
- PlayerAudioController mutes audio from players in other channels
See Private Voice Channels for full reference.
- Private Voice Channels — explanation of how channels work
- Privacy Channel Reference — technical reference
- Tutorial #1 — custom override zones with code
- Architecture — how channels fit in the update loop
- 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