niaka3dayo/agent-skills-vrc-udon/unity-vrc-world-sdk-3
Claude Code and agent skill by niaka3dayo/agent-skills-vrc-udon
- community
Checking that the SKILL.md file is still in the repository.
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 WorldQualitySettings, VRC_SceneDescriptor, VRC_Pickup, VRC_Station, VRC_Mirror, VRC_ObjectSync, VRC_CameraDolly, spawn points, collision matrices, PhysBone and Contact component placement, Box Contacts,…
Install
npx vskill@latest install niaka3dayo/agent-skills-vrc-udon/unity-vrc-world-sdk-3SKILL.md
VRChat World SDK 3 Guide
Table of Contents
| Section | Content | Reference | |
|---|---|---|---|
| Scene Setup | VRC_SceneDescriptor, Spawn | This file | |
| Components | Pickup, Station, Mirror | references/components.md | |
| Layers & Collision | Layers, Collision Matrix | references/layers.md | |
| Performance | Optimization guide | references/performance.md | |
| Lighting | Lighting settings | references/lighting.md | |
| Audio & Video | Audio, Video players | references/audio-video.md | |
| Build Validation | Red/yellow/white SDK alerts | references/build-validation.md | |
| World Upload | Upload workflow | references/upload.md | |
| Troubleshooting | Problem solving | references/troubleshooting.md | |
| Cheatsheet | 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 | Leave several video players decoding at once without profiling the target devices | Each active player adds decoding overhead, which can cause frame drops and audio issues | Disable players that are not playing; profile concurrent playback on each target | |
| 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. When a request spans several rows, load every MANDATORY READ those rows list; a Do NOT Load entry never overrides another matching row's MANDATORY READ.
| 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 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.6
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.6.
The table below keeps feature-introduction history for migration reference. SDK 3.7.1-3.10.5 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.6 unless a reference explicitly marks a historical migration case.
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/unity-vrc-world-sdk-3/SKILL.md
Popularity
- Repository stars
- 320
- Repository forks
- 5
- Repository npm downloads, 7 days
- 316
- 7-day trend score
- 43
Stars and forks are for the whole GitHub repository, not this skill alone. Downloads are for the repository's npm package. Refreshed 8 May 2026, 5 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/niaka3dayo/agent-skills-vrc-udon/unity-vrc-world-sdk-3)