niaka3dayo/agent-skills-vrc-udon/unity-vrc-world-sdk-3

Claude Code and agent skill by niaka3dayo/agent-skills-vrc-udon

Trust tier 2
  • community
LLM review pending
Source check pending

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

SKILL.md

VRChat World SDK 3 Guide

Table of Contents

SectionContentReference
Scene SetupVRC_SceneDescriptor, SpawnThis file
ComponentsPickup, Station, Mirrorreferences/components.md
Layers & CollisionLayers, Collision Matrixreferences/layers.md
PerformanceOptimization guidereferences/performance.md
LightingLighting settingsreferences/lighting.md
Audio & VideoAudio, Video playersreferences/audio-video.md
Build ValidationRed/yellow/white SDK alertsreferences/build-validation.md
World UploadUpload workflowreferences/upload.md
TroubleshootingProblem solvingreferences/troubleshooting.md
CheatsheetQuick referenceCHEATSHEET.md

Method Migration

The following public methods were renamed because an unprefixed, parameterless public UdonSharp method remains callable through legacy network dispatch:

BeforeAfter
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 thisWhy it hurtsUse instead
1Enable Mirror by default (active on world join)A mirror adds another costly scene render; the impact depends on view, scene, resolution, and deviceDefault Mirror OFF; add a player-controlled toggle and profile each target device
2Use realtime directional lights with real-time shadows without profilingRealtime shadow cost varies with scene geometry, view, and target device and can dominate frame time on AndroidPrefer baked lightmaps + light probes; profile the target device before keeping any realtime shadows
3Set Respawn Height at or above the world floorPlayer respawns → falls → respawns again → infinite loop; players cannot recoverSet to an unreachable depth (e.g., floor at Y=0 → Respawn at Y=-100)
4Skip "Setup Layers for VRChat" on a new projectLayer collision matrix is wrong by default — players walk through walls, Pickups clip floorsRun VRChat SDK > Builder > "Setup Layers for VRChat" before placing any colliders
5Enable Post-Processing without an Android build profilePost-processing is disabled at runtime on Android, so the authored effect will not appear and unnecessary resources can still enlarge the buildUse a separate Android build profile with post-processing removed
6Leave several video players decoding at once without profiling the target devicesEach active player adds decoding overhead, which can cause frame drops and audio issuesDisable players that are not playing; profile concurrent playback on each target
7Use Cloth on Android, or add many Unity Constraints without profilingCloth is disabled on Android. Unity Constraints are permitted in worlds, but overuse can significantly affect performanceRemove Cloth from the Android build; prefer VRC Constraints for new work and profile any constraint-heavy setup
8Upload without completing a lightmap bakeRealtime GI adds substantial scene-dependent render cost and is unsuitable as an unmeasured fallback on AndroidBake lights before upload, then verify the result on the target device
9Place player walkable surfaces on Default layer (0)Collision matrix is wrong by default — avatar physics collision is unreliable; players may clip through geometryUse Environment (layer 11) for all walkable geometry, walls, and floors
10Use very high lightmap resolution for large areas without profilingTexture memory can spike significantly at high resolutions; a common cause of OOM crashes on mobile headsetsStart 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
11Add VRC_UIShape to a Screen Space or Overlay CanvasVRC_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 builderSet 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.

TaskMANDATORY READOptionalDo NOT LoadLoad Rationale
Setting up a new scene from scratchcomponents.md, layers.mdupload.mdaudio-video.md, troubleshooting.mdCollision matrix non-obvious; component deps needed upfront
Making objects grabbable (VRC_Pickup)components.mdlayers.mdaudio-video.md, lighting.mdPickup/Rigidbody requirements not in standard Unity docs
Configuring Dynamics for Worlds (PhysBones, Contacts, Box Contacts, Global Avatar PhysBone Colliders, world VRCPhysBoneCollider access)components.mdlayers.md, troubleshooting.md; use unity-vrc-udon-sharp for Udon codeaudio-video.md, lighting.mdDynamics component availability and Udon access are SDK-version sensitive
Setting up seating (VRC_Station)components.mdlayers.mdaudio-video.md, performance.mdStation collider + exit requirements are VRChat-specific
Optimizing FPS for Questperformance.md, lighting.mdtroubleshooting.mdaudio-video.md, upload.mdQuest limits differ from PC; bake requirements non-obvious
Adding audio or video player / voice zones (SetVoiceGain, Steam Audio)audio-video.md, components.mdtroubleshooting.mdlighting.md, performance.mdAVPro vs Unity Video selection is VRChat-specific
Configuring WorldQualitySettings, realtime probes, or Shadowmask Modecomponents.mdlighting.md; Udon API: unity-vrc-udon-sharpaudio-video.md, layers.mdExisting startup setters and override flags can overwrite authored quality choices
Baking lights / lightmap setuplighting.md, performance.md—audio-video.md, layers.mdLightmap resolution and probe placement affect Quest VRAM
SDK Build Panel validation alerts, red/yellow/white warnings, or Auto Fix questionsbuild-validation.mdupload.md, troubleshooting.mdaudio-video.md, lighting.mdAlert severity, build consequence, and Auto Fix side effects must come from SDK-backed catalog
World upload and publishupload.mdbuild-validation.md, troubleshooting.mdaudio-video.md, lighting.mdUpload steps and validation order are fragile; easy to miss
Debugging collision or layer issueslayers.md, troubleshooting.mdcomponents.mdaudio-video.md, lighting.mdVRChat collision matrix differs from Unity default
Mirror setup and configurationcomponents.mdperformance.mdaudio-video.md, upload.mdMirror 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.

DecisionOptionsImplication
Quest required?Yes / NoYes → 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) / ExploreDetermines which SDK components are mandatory
Lighting approach?Baked / Mixed / RealtimePrefer 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:

text
Quest required? → Yes
├── Shaders: World shaders are unrestricted; prefer mobile-compatible shaders and profile custom ones
├── Lighting: Baked by default; retain realtime effects only after target-device profiling
├── Geometry: Budget approximately 250,000 triangles for the whole world; reduce further when profiling calls for it
├── Materials: Minimize unique materials and draw calls; no fixed world upload limit is documented
├── Audio: Mono, compressed, limited concurrent sources
└── Physics: Simplified colliders, minimal Rigidbodies

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

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
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/niaka3dayo/agent-skills-vrc-udon/unity-vrc-world-sdk-3/badge)](https://verified-skill.com/skills/niaka3dayo/agent-skills-vrc-udon/unity-vrc-world-sdk-3)

Something wrong with this skill or its page? Tell us.