unity-vrc-world-sdk-3
VRChat World SDK 3 guide for scene and Inspector setup, component placement, optimization, and upload. Use for VRChat world scene configuration, VRC SDK components, layers, baked lighting, Quest/Android performance, Dynamics for Worlds, Build Panel warning triage, validation, and upload. Covers Worl
By niaka3dayo · 769 installs
npx skills add niaka3dayo/agent-skills-vrc-udon --skill unity-vrc-world-sdk-3
Source repository · Upstream listing
VRChat World SDK 3 Guide
Table of Contents
Section Content Reference
[Scene Setup]( scene setup) VRC SceneDescriptor, Spawn This file
[Components]( components) Pickup, Station, Mirror references/components.md
[Layers & Collision]( layers collision) Layers, Collision Matrix references/layers.md
[Performance]( performance) Optimization guide references/performance.md
[Lighting]( lighting) Lighting settings references/lighting.md
[Audio & Video]( audio video) Audio, Video players references/audio video.md
[Build Validation](references/build validation.md) Red/yellow/white SDK alerts references/build validation.md
[World Upload]( world upload) Upload workflow references/upload.md
[Troubleshooting]( troubleshooting) Problem solving references/troubleshooting.md
[Cheatsheet](CHEATSHEET.md) Quick reference CHEATSHEET.md
Method Migration
The following public methods were renamed because an unprefixed, parameterless
public UdonSharp method remains callable through legacy network dispatch:
Before After
ForceDropPickup ForceDropPickup
IsHeld IsHeld
IsOccupied IsOccupied
StopSound StopSound
SlowUpdate SlowUpdate
Update Inspector event strings, SendCustomEvent calls, delayed events and
nameof(...) expressions, and cross behaviour calls. Compatibility aliases are
not provided because an old unprefixed alias would restore the same legacy network exposure.
Common Mistakes (NEVER List)
These cause silent world failures, performance disasters, or Quest incompatibility:
NEVER do this Why it hurts Use instead
1 Enable Mirror by default (active on world join) A mirror adds another costly scene render; the impact depends on view, scene, resolution, and device Default Mirror OFF; add a player controlled toggle and profile each target device
2 Use realtime directional lights with real time shadows without profiling Realtime shadow cost varies with scene geometry, view, and target device and can dominate frame time on Android Prefer baked lightmaps + light probes; profile the target device before keeping any realtime shadows
3 Set Respawn Height at or above the world floor Player respawns → falls → respawns again → infinite loop; players cannot recover Set to an unreachable depth (e.g., floor at Y=0 → Respawn at Y= 100)
4 Skip "Setup Layers for VRChat" on a new project Layer collision matrix is wrong by default — players walk through walls, Pickups clip floors Run VRChat SDK Builder "Setup Layers for VRChat" before placing any colliders
5 Enable Post Processing without an Android build profile Post processing is disabled at runtime on Android, so the authored effect will not appear and unnecessary resources can still enlarge the build Use a separate Android build profile with post processing removed
6 Place more than 2 active video players simultaneously Each player adds significant decoding overhead; running 2 simultaneously is a common cause of frame drops and audio issues in practice Disable extra players at scene start; activate only the currently playing one
7 Use Cloth on Android, or add many Unity Constraints without profiling Cloth is disabled on Android. Unity Constraints are permitted in worlds, but overuse can significantly affect performance Remove Cloth from the Android build; prefer VRC Constraints for new work and profile any constraint heavy setup
8 Upload without completing a lightmap bake Realtime GI adds substantial scene dependent render cost and is unsuitable as an unmeasured fallback on Android Bake lights before upload, then verify the result on the target device
9 Place player walkable surfaces on Default layer (0) Collision matrix is wrong by default — avatar physics collision is unreliable; players may clip through geometry Use Environment (layer 11) for all walkable geometry, walls, and floors
10 Use very high lightmap resolution for large areas without profiling Texture memory can spike significantly at high resolutions; a common cause of OOM crashes on mobile headsets Start at 10 20 texels/unit (PC) / 5 10 (Quest) as a practical guideline; profile VRAM and adjust — official guidance says "keep lightmap resolution low" for Quest
11 Add VRC UIShape to a Screen Space or Overlay Canvas VRC UIShape requires World Space Canvas; other modes throw a runtime Unity error in VRChat — the UI renders visually but is not interactive, with no visible error to the world builder Set Canvas Render Mode to World Space before adding VRC UIShape
Reference Loading Guide
Load only what the task requires.
Task MANDATORY READ Optional Do NOT Load Load Rationale
Setting up a new scene from scratch components.md , layers.md upload.md audio video.md , troubleshooting.md Collision matrix non obvious; component deps needed upfront
Making objects grabbable (VRC Pickup) components.md layers.md audio video.md , lighting.md Pickup/Rigidbody requirements not in standard Unity docs
Configuring Dynamics for Worlds (PhysBones, Contacts, Box Contacts, Global Avatar PhysBone Colliders, world VRCPhysBoneCollider access) components.md layers.md , troubleshooting.md ; use unity vrc udon sharp for Udon code audio video.md , lighting.md Dynamics component availability and Udon access are SDK version sensitive
Setting up seating (VRC Station) components.md layers.md audio video.md , performance.md Station collider + exit requirements are VRChat specific
Optimizing FPS for Quest performance.md , lighting.md troubleshooting.md audio video.md , upload.md Quest limits differ from PC; bake requirements non obvious
Adding audio or video player / voice zones (SetVoiceGain, Steam Audio) audio video.md , components.md troubleshooting.md lighting.md , performance.md AVPro vs Unity Video selection is VRChat specific
Configuring WorldQualitySettings, realtime probes, or Shadowmask Mode components.md lighting.md ; Udon API: unity vrc udon sharp audio video.md , layers.md Existing startup setters and override flags can overwrite authored quality choices
Baking lights / lightmap setup lighting.md , performance.md — audio video.md , layers.md Lightmap resolution and probe placement affect Quest VRAM
SDK Build Panel validation alerts, red/yellow/white warnings, or Auto Fix questions build validation.md upload.md , troubleshooting.md audio video.md , lighting.md Alert severity, build consequence, and Auto Fix side effects must come from SDK backed catalog
World upload and publish upload.md build validation.md , troubleshooting.md audio video.md , lighting.md Upload steps and validation order are fragile; easy to miss
Debugging collision or layer issues layers.md , troubleshooting.md components.md audio video.md , lighting.md VRChat collision matrix differs from Unity default
Mirror setup and configuration components.md performance.md audio video.md , upload.md Mirror layer mask requirements are VRChat specific
Before Starting a New World — Design Decisions
These decisions shape every downstream choice. Make them first, before placing any component.
Decision Options Implication
Quest required? Yes / No Yes → Quest First philosophy applies from day 0, not as a retrofit
Expected player count? 1–8 / 9–40 / 40+ Affects spawn count, mirror policy, max video players
Primary interaction? Grab (Pickup) / Sit (Station) / Watch (Video) / Explore Determines which SDK components are mandatory
Lighting approach? Baked / Mixed / Realtime Prefer baked lighting on Android; profile each target device before keeping realtime lighting or shadows
Networked objects? None / Physics (Pickup+ObjectSync) / State (UdonSynced) Determines sync architecture before Udon scripting begins
Design Philosophy: Quest First
If the world must run on Android, decide those constraints before tuning the PC build. Test each target separately.
Android headsets have mobile CPU, GPU, memory, and thermal budgets that differ
from PC and vary by device:
GPU : Realtime lights, shadows, overdraw, and complex shaders can dominate frame time
Memory : Textures and lightmaps share limited system memory with the client
Thermals : Sustained load can reduce available performance during a session
Measure each target device independently; PC results do not establish Android
performance, and a single client Quest result does not predict a particular PC
frame rate. Use the Unity Profiler and the [official Android content optimization
guide](https://creators.vrchat.com/platforms/android/quest content optimization/)
before publishing.
NEVER optimize exclusively for PC with "Quest support added later" — by that point, lighting, materials, and mesh density are all locked to PC quality, and the Quest port requires rebuilding everything.
Quest First Cascade — when Quest is required, every downstream decision inherits constraints:
SDK Versions
Active support / last verified : SDK 3.10.5
From v4.0.0 onward, the policy is latest stable SDK only; support moves to a new stable release only after this repository verifies it. A new stable release is not supported automatically. Current last verified target: 3.10.5.
The table below keeps feature introduction history for migration reference. SDK 3.7.1 3.10.4 entries are historical information only; they are not active support or validation targets for this Skill. This is the Skill's support boundary, not a statement about VRChat's own SDK policy. Primary generated examples target SDK 3.10.5 unless a reference explicitly marks a historical migration case.
SDK New Features Status
3.7.1 StringBuilder, Regex, System.Random Historical
3.7.4 Persistence API (PlayerData/PlayerObject) Historical
3.7.6 Multi platform Build & Publish (simultaneous PC + Android builds) Historical
3.8.0 PhysBone dependency sorting, Force Kinematic On Remote , Drone API Historical
3.8.1 [NetworkCallable] events with parameters, Others / Self targets, VRCCameraSettings Historical
3.9.0 Camera Dolly API , Auto Hold simplification, VRCCameraSettings additions (CullingMask, GetCurrentCamera) Historical
3.10.0 Dynamics for Worlds (PhysBones, Contacts, VRC Constraints) Historical
3.10.1 Bug fixes and stability improvements Historical
3.10.2 EventTiming extensions, PhysBones fixes, shader time globals Historical
3.10.3 VRCPlayerApi.isVRCPlus , VRCRaycast (avatar), Mirror render order fix Historical
3.10.4 VRCTween, Box shaped Contacts, Global Avatar PhysBone Colliders, world VRCPhysBoneCollider Udon access, Data Container capacity APIs Historical
3.10.5 WorldQualitySettings, Pickup Outline Renderers, Pipeline Manager validation; writable VRCQualitySettings and Assembly Version Defines → [UdonSharp Skill](../unity vrc udon sharp/SKILL.md) Active / Last verified
Use SDK