Unity Layers in VRChat Worlds
Unity layers control which objects collide, which raycasts can hit them, and which cameras render them. VRChat also reserves built-in layers for players, pickups, mirrors, UI, hardware objects, and other client systems.
Keep VRChat's built-in configuration intact. Use layers 22–30 for custom world systems. Layer 31 is used by Unity's editor preview mechanics and should not be used for uploaded world content.
Create custom world layers only in the range that VRChat leaves available.
- Name a free layer from 22 through 30.
- Configure its collision matrix, camera masks, raycast masks, and interaction passthrough deliberately.
- Build and test the result on desktop, mobile, and VR interaction paths.
The Worlds SDK configures VRChat's built-in layer names and collision matrix. VRChat states that changes to built-in layers are overridden when the world is uploaded.
Which Layers Can You Customize?
| Range | Guidance |
|---|---|
0–21 |
Built-in Unity or VRChat layers; preserve their names and platform behaviour |
22–30 |
User layers available for custom names and collision rules |
31 |
Avoid; Unity uses it for editor preview mechanics |
VRChat does not override the names or collision matrix of layers 22–30 in uploaded worlds. That makes them the correct place for systems such as custom interaction volumes, projectile filters, minigame teams, camera-only geometry, or specialized raycast targets.
Create a User Layer
- Open Edit → Project Settings → Tags and Layers.
- Find an unused slot from User Layer 22 through User Layer 30.
- Enter a specific name such as
WorldInteractable,ProjectileTarget, orMinigameBoundary. - Select the relevant GameObject.
- Set its Layer in the Inspector.
- Decide whether the assignment should apply to the object's children.
- Save the scene.
Do not rename a reserved layer to avoid creating a user layer. The name may be restored during upload while objects keep an unintended numeric assignment.
Configure the Collision Matrix
Open Edit → Project Settings → Physics and inspect the Layer Collision Matrix.
Each checkbox determines whether colliders on two layers can interact through normal 3D physics. Configure only the user-layer relationships your system requires.
| System | Collision-matrix question |
|---|---|
| Player boundary | Should the local and remote player capsules collide with it? |
| Pickup | Should the pickup collide with environment geometry, other pickups, or neither? |
| Projectile | Which targets and scenery can receive a physics hit? |
| Trigger volume | Which objects can enter it, and which Udon event handles the result? |
| Decorative collider | Does it need physics at all? |
| Minigame partition | Should objects from opposing groups collide? |
A layer collision matrix does not replace a raycast LayerMask. Physics collisions and scripted queries must both be configured.
VRChat Built-In Layer Reference
The table below summarizes VRChat's current official layer definitions.
| Layer | Name | VRChat behaviour | Stickers |
|---|---|---|---|
0 |
Default | Default GameObjects and avatar pedestals | Yes |
1 |
TransparentFX | Unity flare assets | No |
2 |
IgnoreRaycast | Ignored by an unmasked Unity physics raycast, but not by VRChat physics raycasts | No |
3 |
Item | VRChat-spawned items; uploaded objects on this layer move to Default | No |
4 |
Water | Unity standard assets, VRChat portals and mirrors, and common post-processing use | Yes |
5 |
UI | Unity UI; special VRChat pointer and camera behaviour | No |
6 |
reserved6 | Reserved; uploaded objects move to Default | No |
7 |
reserved7 | Reserved; uploaded objects move to Default | No |
8 |
Interactive | Available for colliders that should not accept stickers | No |
9 |
Player | Remote VRChat players | No |
10 |
PlayerLocal | Local player rendering | No |
11 |
Environment | Unused by Unity and VRChat | Yes |
12 |
UiMenu | Special VRChat UI-pointer behaviour | No |
13 |
Pickup | Default layer for VRChat pickups; does not collide with players | No |
14 |
PickupNoEnvironment | Collides only with Pickup | No |
15 |
StereoLeft | Unused by Unity and VRChat | No |
16 |
StereoRight | Unused by Unity and VRChat | No |
17 |
Walkthrough | Colliders do not collide with players | Yes |
18 |
MirrorReflection | Mirror-only renderers and raycast passthrough behaviour | No |
19 |
InternalUI | Reserved for VRChat menus, nameplates, and debug panels | No |
20 |
HardwareObjects | Reserved for controller and tracker representations | No |
21 |
reserved4 | Reserved; uploaded objects move to Default | No |
22–30 |
User layers | Custom names and collision settings are preserved | Enabled by default |
31 |
Editor Preview | Used by Unity editor preview mechanics | Enabled by default |
Layer-Specific Decisions
Default and Environment
Use Default for ordinary world geometry unless a deliberate physics, rendering, sticker, or interaction rule requires another layer.
Environment is currently unused by Unity and VRChat, but it remains a built-in layer. For project-specific naming and collision rules, prefer a named user layer in the 22–30 range.
Interactive
VRChat recommends layer 8 (Interactive) for colliders where users should not be able to place stickers.
The layer name does not automatically make an object usable. Add the appropriate Udon, UI, pickup, or interaction component separately.
Pickup and PickupNoEnvironment
VRChat pickups normally use layer 13 (Pickup), which does not collide with players.
Layer 14 (PickupNoEnvironment) collides only with Pickup. Confirm the resulting collision behaviour in VRChat when using it for held or moving objects.
Walkthrough
Colliders on layer 17 do not collide with players. Use it for geometry that must remain detectable or visible without blocking the player capsule.
Player collision and Udon trigger detection are separate behaviours. Add and test the appropriate trigger when the world must react to a player entering an area.
MirrorReflection
Renderers on layer 18 appear only in mirrors and are not rendered by VRChat's main camera. Colliders on the layer do not block VRChat raycasts.
Use this for a deliberate mirror-only representation, not as a general hiding layer.
UI and UiMenu
Layers 5 and 12 have special VRChat pointer behaviour. The UI pointer ignores them unless the player's VRChat menu is open.
For custom world-space UI, verify:
- Canvas render mode
VRC_UiShapeor required interaction components- Graphic Raycaster configuration
- collider and pointer behaviour
- desktop mouse, mobile touch, and VR laser input
Stickers
VRChat+ users can place stickers on eligible world colliders.
To prevent stickers on a specific collider:
- Decide whether the object should keep its existing physics and interaction behaviour.
- Move it to an appropriate non-sticker layer.
- VRChat recommends
Interactivewhen no other built-in behaviour is required. - Build and test collisions, raycasts, and interactions again.
World owners can disable stickers for the entire world through the world's settings on the VRChat website.
User layers 22–31 allow stickers by default. VRChat's documentation states that adding a user layer to the Interact Passthrough list disables stickers on it.
Raycasts and Layer Masks
Use an explicit LayerMask for physics queries. This prevents a raycast or overlap test from scanning reserved layers and protected VRChat objects that the world system does not need.
Layer masks matter for:
- raycasts and sphere casts
- box and capsule casts
- overlap queries
- collider raycasts
- Rigidbody sweep tests
- physics check queries
VRChat recommends calling Utilities.IsValid on objects returned by physics queries. Protected objects can be returned as null; using them without validation can stop the UdonBehaviour.
Unity's unmasked physics raycasts ignore layer 2, but VRChat's physics raycasts do not. Use explicit layer masks instead of assuming the layer name applies to every query source.
Interaction Blocking and Passthrough
Most VRChat layers block distance grabbing and UI laser interaction. These built-in layers allow interaction rays to pass through:
UiMenuUIPlayerLocalMirrorReflection
User layers block interaction by default. Add a user layer to the world's Interact Passthrough mask when rays should reach eligible objects behind its colliders.
This choice affects stickers as well as interaction passthrough, so test both outcomes.
Desktop, Mobile, and VR Ray Origins
VRChat documents different interaction-ray origins:
| Platform | Ray origin |
|---|---|
| Desktop and mobile | Inside the player capsule |
| VR | The tracked hand |
A VR hand can pass through a collider even when the player capsule cannot. After penetration, that collider may no longer block the VR user's interaction ray.
Test critical interfaces with:
- desktop cursor or interaction controls
- mobile input
- left and right VR hands
- close-range and distance interaction
- player standing against the blocking collider
Camera and Mirror Culling Masks
Layers can also control rendering through camera culling masks.
Before changing a renderer's layer, check:
- The main world camera behaviour.
- Mirror reflection masks.
- Security cameras or portal cameras.
- Post-processing camera setup.
- VRChat camera visibility.
An object can be physically present and interactable while hidden from one camera. Diagnose rendering and physics separately.
Layer Change Test Matrix
| Test | What to verify |
|---|---|
| Player walk | Expected geometry blocks or permits the player |
| Pickup motion | Pickup and environment collisions match the design |
| Udon trigger | Enter, stay, and exit events fire where required |
| Scripted raycast | Only intended layers are detected |
| Distance interaction | Blocking and passthrough are correct |
| VR hand interaction | Hand-origin rays work near colliders |
| Mirror | Intended renderers appear or remain hidden |
| World camera | Culling masks show the intended objects |
| Sticker placement | Stickers are accepted or rejected intentionally |
| Re-upload | Reserved layers were not renamed or reset unexpectedly |
Troubleshooting
An object's layer changes after upload.
Check whether the object uses Item or a reserved VRChat layer. VRChat moves uploaded objects on certain built-in layers back to Default.
My custom layer name or collision setting is reset.
Use a layer from 22 through 30. VRChat preserves those user-layer names and collision rules but overrides changes to built-in layers.
A player walks through a collider unexpectedly.
Check the object's layer and the Physics collision matrix. Walkthrough and Pickup do not collide with players, and a user layer may have player collisions disabled.
A scripted raycast hits protected or unrelated objects.
Supply an explicit LayerMask and validate returned objects with Utilities.IsValid before using them. Do not depend on IgnoreRaycast for every VRChat query.
The interaction laser passes through a collider.
Check the built-in layer behaviour and the Interact Passthrough mask. Also test in VR, where the ray begins at the tracked hand and may originate beyond a penetrated collider.
A UI works with the menu open but not normally.
UI and UiMenu are ignored by VRChat's UI pointer unless the VRChat menu is open. Review the canvas, interaction components, raycaster, and selected layer.
An object appears only in a mirror.
Check whether its renderer is on MirrorReflection. That layer is excluded from the main camera and intended for mirror-only rendering.
Users can place stickers on a custom-layer collider.
User layers allow stickers by default. Move the collider to an appropriate non-sticker layer such as Interactive, add the user layer to Interact Passthrough when that behaviour also fits, or disable stickers for the world.
Next Steps
- Check allowlisted world components
- Build a VRChat world
- Run the world optimization checklist
- Review Unity layers and tags
- Return to VRChat creator guides
Official References
Topics: Unity layers in VRChat, user layers, collision matrix, raycast masks, stickers, interaction passthrough