Skip to content
Development
Skill

/unity-vrc-world-sdk-3

Scene, component, and upload guidance for VRChat World SDK 3. Active support / last verified: SDK 3.10.6. VRChat changes Unity behaviour in ways the editor does not show (reserved layers, runtime layer names, Android limits, Build Panel validation), so load this skill before

From plugin
vrc-udon-skills
3684 skills1 hook

Claude Code

$ npx -y skills add niaka3dayo/agent-skills-vrc-udon --skill unity-vrc-world-sdk-3 --agent claude-code

SKILL.md

unity-vrc-world-sdk-3.SKILL.md
name: unity-vrc-world-sdk-3
description: >
    Scene, component, and upload guidance for VRChat World SDK 3. Active support /
    last verified: SDK 3.10.6. VRChat changes Unity behaviour in ways the editor does not show
    (reserved layers, runtime layer names, Android limits, Build Panel validation), so load
    this skill before setting up or reviewing a VRChat world scene, even for one component.
    Covers VRC SDK component placement and Inspector setup (VRC_SceneDescriptor, VRC_Pickup,
    VRC_Station, VRC_Mirror, VRC_ObjectSync, VRC_CameraDolly, VRCBillboard, VRCPlacementZone,
    spawn points), layers and collision matrices, baked lighting, Quest/Android performance,
    WorldQualitySettings, Dynamics for Worlds (PhysBone and Contact component placement,
    Box Contacts, Global Avatar PhysBone Colliders, VRCPhysBoneCollider component setup),
    audio/video, SDK validation, Build Panel warning triage (Auto Fix, red/yellow/white
    warnings), and upload. Do not use for UdonSharp C# or VRCTween calls; use
    unity-vrc-udon-sharp for runtime scripting, asmdef, and Version Defines work.
license: MIT
metadata:
    author: niaka3dayo
    version: "4.3.1"
    tags: vrchat, world-sdk, scene-setup, optimization, components, upload, sdk-validation, build-panel

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` |

---

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 M

Read more
@niaka3dayo
Ships withvrc-udon-skills

Skills, rules, and validation hooks that teach AI coding agents to generate correct UdonSharp code

Stars on GitHub

Momentum

stars in total
368
Star history of niaka3dayo/agent-skills-vrc-udon on GitHub, a chart by star-history.com

Other skills on vrc-udon-skills.

release

release

Release procedure for agent-skills-vrc-udon: sync main into dev, bump the five version fields, open and merge the release PR,…

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills2w309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc2w293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react5d252k
@facebook@facebookInstall Skill

Questions about unity-vrc-world-sdk-3.

Which coding agents can use unity-vrc-world-sdk-3?
unity-vrc-world-sdk-3 installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.