release
Release procedure for agent-skills-vrc-udon: sync main into dev, bump the five version fields, open and merge the release PR,…
Rules and references for VRChat UdonSharp on SDK 3.10.6, the active and verified target. UdonSharp compiles only a subset of C#, and its networking fails without an error, so load this skill before writing, reviewing, debugging, or migrating any UdonSharp or UdonBehaviour code,
Claude Code
$ npx -y skills add niaka3dayo/agent-skills-vrc-udon --skill unity-vrc-udon-sharp --agent claude-code
Codex
$ npx skills add niaka3dayo/agent-skills-vrc-udon --skill unity-vrc-udon-sharp -a codex -y
Cursor
$ npx skills add niaka3dayo/agent-skills-vrc-udon --skill unity-vrc-udon-sharp -a cursor -y
Gemini CLI
$ npx skills add niaka3dayo/agent-skills-vrc-udon --skill unity-vrc-udon-sharp -a gemini-cli -y
GitHub Copilot
$ npx skills add niaka3dayo/agent-skills-vrc-udon --skill unity-vrc-udon-sharp -a github-copilot -y
OpenCode
$ npx skills add niaka3dayo/agent-skills-vrc-udon --skill unity-vrc-udon-sharp -a opencode -y
Windsurf
$ npx skills add niaka3dayo/agent-skills-vrc-udon --skill unity-vrc-udon-sharp -a windsurf -y
name: unity-vrc-udon-sharp
description: >-
Rules and references for VRChat UdonSharp on SDK 3.10.6, the active and verified target.
UdonSharp compiles only a subset of C#, and its networking fails without an error, so load
this skill before writing, reviewing, debugging, or migrating any UdonSharp or UdonBehaviour
code, even a short script. Covers synced runtime state and ownership, NetworkCallable events,
NetworkCalling.CallingPlayer and Udon network authorization, a local public helper or
public-method audit, C# to Udon conversion, persistence, data containers, web loading,
UdonSharp Assembly Version Defines, and runtime API access from Udon such as VRCTween calls,
VRCQualitySettings, VRCBillboard, constraint source methods, PhysBone/Contact callbacks, and
world VRCPhysBoneCollider runtime access. Not for scene setup, component setup, Build Panel
work, layers, scene and rendering optimization, or upload; use unity-vrc-world-sdk-3 for those.
license: MIT
metadata:
author: niaka3dayo
version: "4.3.1"
tags: vrchat, udonsharp, udon, networking, sync, persistence, dynamics, asmdef, vpm, assembly-definitionUdonSharp looks like regular Unity C# scripting — until you hit its hidden walls. Many standard C# features (`List<T>`, `async/await`, `try/catch`, LINQ, generics) **silently fail or refuse to compile** in code that runs in the Udon runtime. Editor-evaluated field initializers are a separate context: they can use some ordinary C# features to generate a final value that Udon can hold. Networking is even more treacherous: modifying a synced variable without ownership produces no error — it just does nothing. Forgetting `RequestSerialization` means your state changes never leave your machine. Standard single-player local testing gives zero signal about these networking bugs because there is only one player.
Every rule in this skill exists because UdonSharp's default behavior is to **fail silently**. Read the rule sheets in `rules/` before generating any code (see [Rules](#rules-read-before-generating-code)).
Four architectural decisions that must be made before choosing sync modes or writing any synced variable. Changing them mid-implementation typically requires a full rewrite:
1. **Constraints First** — For Udon runtime code, assume standard C# features are blocked until verified. Treat Editor-evaluated field initializers separately and require a final Udon-supported value. Check `udonsharp-constraints.md` before using any API. 2. **Ownership Before Mutation** — Only the owner of an object can modify its synced variables. If the local player is not the owner, `SetOwner` first; then modify → `RequestSerialization` (Manual sync). 3. **Late Joiner Correctness** — State must be correct for players who join after events have occurred. Design for re-serialization, not just live updates. 4. **Sync Minimization** — Every synced variable costs bandwidth (see data budget in `udonsharp-sync-selection.md`). Derive what you can locally; sync only the source of truth. 5. **Event-Driven, Not Polling** — Use `OnDeserialization`, `[FieldChangeCallback]`, and `SendCustomEvent` instead of checking state in `Update()` **for state-change reactions; for hot-path or periodic work, see [Event Dispatch & Cross-Behaviour Call Cost Tiers](references/patterns-performance.md#event-dispatch--cross-behaviour-call-cost-tiers)**.
**Synced arrays: always apply them from `OnDeserialization()`**. Array element changes do not provide a reliable `FieldChangeCallback` signal, and the same guidance applies to same-length changes, array reassignments, and length changes. Have the owner call the same idempotent apply method immediately after mutation, then request Manual serialization once. If a revision guard protects a historical one-shot side effect, a late joiner's first `OnDeserialization()` receives the current revision and may otherwise replay that effect. Baseline the first received revision without the side effect, but run durable `ApplyValues()` before the baseline check; only later revisions should trigger the one-shot. Revision is not ordering or stale-packet protection.
These Udon runtime and Unity serialization constraints cause either **compile-time failures** or **silent data errors**. Check this list before writing UdonSharp code or serialized initial values.
| # | NEVER do this | Why it fails silently | Use in
Skills, rules, and validation hooks that teach AI coding agents to generate correct UdonSharp code
Release procedure for agent-skills-vrc-udon: sync main into dev, bump the five version fields, open and merge the release PR,…
VRChat skill renovator for knowledge fill, refresh, and quality improvement. Use this skill when updating VRChat skills to new…
Scene, component, and upload guidance for VRChat World SDK 3. Active support / last verified: SDK 3.10.6. VRChat changes Unity…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.