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.

Custom Layer Setup

Create custom world layers only in the range that VRChat leaves available.

  1. Name a free layer from 22 through 30.
  2. Configure its collision matrix, camera masks, raycast masks, and interaction passthrough deliberately.
  3. Build and test the result on desktop, mobile, and VR interaction paths.
VRChat note

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

  1. Open Edit → Project Settings → Tags and Layers.
  2. Find an unused slot from User Layer 22 through User Layer 30.
  3. Enter a specific name such as WorldInteractable, ProjectileTarget, or MinigameBoundary.
  4. Select the relevant GameObject.
  5. Set its Layer in the Inspector.
  6. Decide whether the assignment should apply to the object's children.
  7. 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_UiShape or 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:

  1. Decide whether the object should keep its existing physics and interaction behaviour.
  2. Move it to an appropriate non-sticker layer.
  3. VRChat recommends Interactive when no other built-in behaviour is required.
  4. 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.

IgnoreRaycast caveat

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:

  • UiMenu
  • UI
  • PlayerLocal
  • MirrorReflection

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:

  1. The main world camera behaviour.
  2. Mirror reflection masks.
  3. Security cameras or portal cameras.
  4. Post-processing camera setup.
  5. 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

Official References

Topics: Unity layers in VRChat, user layers, collision matrix, raycast masks, stickers, interaction passthrough