Individual skill
unity-vrc-udon-sharp
UdonSharp scripting skill for VRChat SDK 3.10.6 (active and verified target). Use when writing, reviewing, debugging, or migrating UdonSharp C# and UdonBehaviour code. Positive triggers include UdonSharp, NetworkCallable, NetworkCalling, CallingPlayer, Udon network authorization, synced runtime state, a local public helper, public-method audit, C# to Udon conversion, and UdonSharp Assembly Version Defines. VRCQualitySettings, VRCBillboard, constraint source, and VRCTween calls, PhysBone/Contact callbacks, world VRCPhysBoneCollider runtime access, persistence, collection, web, and other component APIs trigger this skill when the request is about Udon, C#, or runtime API access. Excludes scene setup, component setup, Build Panel work, layers, scene and rendering optimization, and upload; route those requests to unity-vrc-world-sdk-3.
skills/unity-vrc-udon-sharp/SKILL.md
Source commit fd4303fa7072094a33556747333053de15745af2
What was checked
- Matches the observed repository HEAD
- Yes
- Scanner rules are current
- No
- Repository scan complete
- No
- Skill scan complete
- No
- Observed behavior
- Not checked yet
- Last checked
- Nov 7, 2026
These are observations at the recorded commit, not a guarantee of safety. Review the source before running it.
Install this skill
Choose an agent in your Stack or copy a command below. Commands fetch the pinned commit and copy only this skill directory. Existing destinations are refused. Copying a command does not install anything.
An install command is unavailable: current rules, complete repository and skill scans, an eligible behavior level and a permitted license are required.
Repository context
- Repository stars (not skill ratings)
- 367
- Repository last updated
- Nov 10, 2026
- License
- MIT
Observed agent integration: No specific integration evidence. Standard SKILL.md installation does not imply verified compatibility.
- ai-agent Repository topic
- claude-code Repository topic
- codex-cli Repository topic
- gemini-cli Repository topic
- udonsharp Repository topic
- vrc-sdk Repository topic
- vrchat Repository topic
- writing Derived category
- security Derived category
- testing Derived category
Declared tags are partial or unavailable.
Files and excerpt
File metadata and permitted, redacted excerpts come from the recorded scan. Source links are pinned to that commit.
Browse files
CHEATSHEET.mddoc · 21,718 bytesLICENSE.txtdoc · 1,067 bytesSKILL.mdcore · 40,233 bytesSKILL.mdcore · 40,233 bytesSKILL.mdcore · 40,233 bytesSKILL.mdcore · 40,233 bytesSKILL.mdcore · 40,233 bytesSKILL.mdcore · 40,233 bytesSKILL.mdcore · 40,233 bytesassets/templates/ArrayUtils.csasset · 4,678 bytesassets/templates/BasicInteraction.csasset · 2,331 bytesassets/templates/BatchedSync.csasset · 3,352 bytesassets/templates/CloggedRetrySync.csasset · 4,061 bytesassets/templates/ContactReceiver.csasset · 8,304 bytesassets/templates/CustomInspector.csasset · 9,578 bytesassets/templates/DataPersistence.csasset · 12,274 bytesassets/templates/DualCopySync.csasset · 3,179 bytesassets/templates/EventBus.csasset · 3,121 bytesassets/templates/MasterManagedPlayerPool.csasset · 15,691 bytesassets/templates/PackedStateSync.csasset · 2,893 bytesassets/templates/PlayerSettings.csasset · 3,562 bytesassets/templates/RateLimitedSync.csasset · 3,720 bytesassets/templates/StateMachine.csasset · 12,733 bytesassets/templates/SyncedObject.csasset · 5,723 bytesassets/templates/UdonSharpProgramAssetAutoGenerator.csasset · 5,814 bytesassets/templates/UndoableGameManager.csasset · 6,170 byteshooks/validate-udonsharp.ps1runs · 37,347 byteshooks/validate-udonsharp.shruns · 40,077 bytesreferences/api.mddoc · 54,501 bytesreferences/assembly-definitions.mddoc · 7,479 bytesreferences/constraints.mddoc · 45,650 bytesreferences/context-preservation.mddoc · 10,238 bytesreferences/dynamics.mddoc · 36,664 bytesreferences/editor-scripting.mddoc · 33,089 bytesreferences/events.mddoc · 33,554 bytesreferences/image-loading-vram.mddoc · 34,474 bytesreferences/networking-antipatterns.mddoc · 24,010 bytesreferences/networking-bandwidth.mddoc · 14,751 bytesreferences/networking.mddoc · 54,525 bytesreferences/patterns-core.mddoc · 23,010 bytesreferences/patterns-networking.mddoc · 43,432 bytesreferences/patterns-performance.mddoc · 48,094 bytesreferences/patterns-ui.mddoc · 61,752 bytesreferences/patterns-utilities.mddoc · 31,164 bytesreferences/patterns-video.mddoc · 28,504 bytesreferences/persistence.mddoc · 32,004 bytesreferences/sdk-migration.mddoc · 24,081 bytesreferences/sync-examples.mddoc · 15,622 bytesreferences/testing.mddoc · 10,735 bytesreferences/troubleshooting.mddoc · 51,483 bytesreferences/vrctween.mddoc · 4,919 bytesreferences/web-loading-advanced.mddoc · 34,765 bytesreferences/web-loading.mddoc · 20,688 bytesrules/udonsharp-constraints.mddoc · 12,265 bytesrules/udonsharp-networking.mddoc · 13,565 bytesrules/udonsharp-sync-selection.mddoc · 3,142 bytes
Read excerpt
# UdonSharp Skill
## Why This Skill Matters
UdonSharp 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 Rules before generating any code.
## Before Writing Network 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:
- **Who owns this state?** One owner writes; all others read. If two players can both write (e.g., a shared toggle), you need an ownership transfer protocol — writes without ownership are silently discarded.
- **When does ownership transfer?** On grab? Interact? Game event? `OnPlayerLeft`? `Networking.SetOwner` is **locally immediate** on the calling client — `Networking.IsOwner(gameObject)` is `true` synchronously after the call, and writing `[UdonSynced]` fields plus `RequestSerialization()` immediately afterwards is safe under an `IsOwner` guard. Concurrent `SetOwner` calls from multiple clients are resolved by network arrival order — there is no client-side arbitration, so accept that the loser's write is overwritten.