Agent Skills for VRChat UdonSharp
Два скилла, правила и проверочные хуки, чтобы агент писал для VRChat корректный код UdonSharp и настраивал сцену мира на SDK 3.10.5
- 341 ★ репозитория
- Последний коммит
- MIT
Расширенный доступ
Почему такой уровень
- Хуки запускают скрипт оболочки (Bash или PowerShell) после каждой правки файла `.cs` в проекте
- Скилл учит агента писать и менять код проекта Unity, а шаблоны на C# попадают в ваш проект
Установка
- Работает в
В терминале, через SkillFoxx CLI
npx skillfoxx add skills/agent-skills-for-vrchat-udonsharpОпределит агенты на машине, покажет уровень доступа и зафиксирует версию.
Другие способы установки
Доступ и проверки
Как мы проверяемРасширенный доступИнструмент запускает код или ходит в сеть, а внешние данные только читает.
- Хуки запускают скрипт оболочки (Bash или PowerShell) после каждой правки файла `.cs` в проекте
- Скилл учит агента писать и менять код проекта Unity, а шаблоны на C# попадают в ваш проект
Это чужой код. Посмотрите файлы в репозитории перед установкой.
Что делает
UdonSharp компилирует C# в сборку Udon для миров VRChat, и в рантайм-коде такие привычные вещи, как `List<T>`, `async/await`, `try/catch`, LINQ и лямбды, дают ошибки компиляции. Набор учит агента этим ограничениям заранее. Скилл `unity-vrc-udon-sharp` отвечает за скрипты: правила замены (`List<T>` на `DataList`, `async` на `SendCustomEventDelayedSeconds`), модель владения и режимы синхронизации, `NetworkCallable`, сохранение данных игрока, Dynamics, загрузку строк и изображений из сети. К нему приложены шпаргалка, 17 шаблонов на C# и 25 справочных файлов. Скилл `unity-vrc-world-sdk-3` отвечает за сцену мира: `VRC_SceneDescriptor` и точки появления, компоненты `VRC_Pickup`, `Station`, `ObjectSync`, зеркала и порталы, слои VRChat, ограничения для Quest и Android, запеченный свет, видеоплееры и порядок загрузки мира. Три файла правил описывают запрещенные возможности C#, сетевые шаблоны и выбор способа синхронизации по дереву решений, где бюджет данных составляет меньше 50 байт на один поведенческий скрипт. Проверочные хуки срабатывают после каждой правки файла `.cs`. Они помечают ошибкой `async/await`, `try/catch` и `StartCoroutine()`, а предупреждением синхронизируемые поля `[UdonSynced]` без `RequestSerialization()` и без `Networking.SetOwner()`, шесть и более синхронизируемых переменных в одном скрипте и массивы `int[]` или `float[]` в синхронизации.
Для кого. Для авторов миров VRChat на Unity, которые пишут скрипты на UdonSharp с помощью Claude Code, Codex CLI или Gemini CLI.
Подходит, если
- Агент пишет на UdonSharp скрипт и выдает код с `List<T>`, `async/await` или LINQ, который не компилируется
- Нужно выбрать способ синхронизации и не раздуть синхронизируемые данные: поможет дерево решений и бюджет данных
- Игроки, зашедшие позже, видят неверное состояние объекта, и нужен шаблон синхронизации под это
- Вы настраиваете сцену мира: точки появления, предметы, которые берут в руки, сиденья, зеркала, видеоплеер
- Перед загрузкой мира нужен список проверок по слоям, производительности и свету, включая ограничения Quest
Не подходит, если
- Вы работаете с другой версией VRChat SDK: поддерживается только 3.10.5, а таблица прежних версий нужна лишь для переноса кода
- Нужна замена официальной документации VRChat: автор называет набор личной базой знаний, и ошибки в нем возможны
- Нужно управлять редактором Unity из агента, создавать объекты и собирать сцену: для этого в каталоге есть MCP for Unity
- Проект не про VRChat: правила описывают ограничения компилятора UdonSharp и запрещают то, что в обычном C# допустимо
- На компьютере нет `jq` и вы рассчитываете на проверки Bash-хука: без `jq` он пропускает код и только пишет предупреждение
Пример запроса к агенту
Напиши UdonSharp-скрипт двери, которая открывается по нажатию и остается открытой для игроков, зашедших позжеОграничения
- Поддержка ограничена VRChat SDK 3.10.5, последней проверенной версией. Записи про 3.7.1–3.10.4 автор оставил как историю для переноса, тестировать и править эти версии он не обещает. Новый стабильный выпуск SDK поддерживается только после проверки в репозитории.
- Автор не связан с VRChat Inc., а набор называет личной базой знаний. Он создан и ведется с помощью Claude, Gemini и Codex, поэтому в нем возможны тонкие ошибки, и документацию VRChat надо сверять отдельно.
- Хук Bash требует `jq`. Без него код проходит без проверки и выводится предупреждение `VALIDATOR-WARNING`. Есть версия на PowerShell.
- Набор не содержит VRChat SDK и компилятора UdonSharp и не заменяет их. Правки в репозиторий автор не принимает, только сообщения об ошибках и запросы знаний.
- Лицензия MIT на документацию, правила, шаблоны и хуки, на SDK и компилятор она не распространяется.
Как отключить. Удалите папки `unity-vrc-udon-sharp` и `unity-vrc-world-sdk-3` из папки скиллов проекта. Если ставили пакетом npm, выполните `npm uninstall agent-skills-vrc-udon`, а хуки уберите из настроек агента, если они там остались.
Частые вопросы
Почему в UdonSharp нельзя использовать List и async?
В коде, который работает в рантайме Udon, `List<T>`, `async/await`, `try/catch`, LINQ и лямбды дают ошибки компиляции. Для списков автор предлагает `DataList`, для задержек `SendCustomEventDelayedSeconds`. Поля, значения которых считает редактор, вынесены в отдельный контекст, и там часть этих возможностей допустима.
Как выбрать способ синхронизации?
По дереву решений. Если другие игроки состояние не видят, синхронизация не нужна. Если опоздавшему состояние не нужно, хватит событий. Если значение меняется непрерывно, например позиция и поворот, берут непрерывную синхронизацию, иначе ручную с минимумом полей `[UdonSynced]`. Цель — меньше 50 байт на скрипт и меньше 100 байт в сумме для небольшого и среднего мира.
Что случится, если публичный метод назвать без подчеркивания?
Такой метод считается устаревшей сетевой точкой входа, то есть к нему можно обратиться по сети. Для локальных публичных методов автор советует начинать имя с `_`, а нужные сетевые вызовы помечать `[NetworkCallable]`.
Как поставить набор?
Автор рекомендует `npx skills add niaka3dayo/agent-skills-vrc-udon`. Есть также `claude plugin add niaka3dayo/agent-skills-vrc-udon`, клонирование репозитория и установка пакета npm `agent-skills-vrc-udon` нужной версии, например `npm install agent-skills-vrc-udon@2.3.0`.
Что делают хуки и когда они срабатывают?
Это проверки PostToolUse, которые запускаются после правки файла `.cs`. Ошибкой они помечают запрещенные возможности, например `async/await` и `AddListener()`, а предупреждением спорные места вроде шести и более синхронизируемых переменных. Версии есть для Bash (`validate-udonsharp.sh`) и PowerShell (`validate-udonsharp.ps1`).
На каких языках есть описание?
Основное описание на английском. Рядом лежат переводы на японский, упрощенный и традиционный китайский и корейский.
Обсуждение
Вопросов и отзывов пока нет.
Похожие
СкиллыОфициальный набор скиллов Unity для агентов: работа с редактором, сборки, 2D и 3D, UI, URP, звук, мультиплеер и монетизация
UnitySkills
unity-skills
Управление редактором Unity из агента через REST API и скиллы: сцены, объекты и компоненты. Три режима разрешений, Unity 2022.3 и новее
agent-skills (misaka-mikoto-tech)
agent-skills
Три скилла одного автора для агента на Windows: безопасный PowerShell, чтение видео Bilibili и работа с открытым Unity Editor
Личный набор автора: общие правила для агентов и десятки скиллов для GitHub, браузера, macOS, сообщений и релизов, плюс скрипт синхронизации
Набор скиллов по геймдеву для AI-агентов с роутером, который сам подбирает нужные под движок и задачу
Builder Skills
Skills for agents
Набор небольших скиллов от Builder.io для рабочих привычек агента: визуальные планы и разборы диффов, сверка с документацией, кросс-агентное ревью и аккуратные
Сравнение с похожими
Записи с тем же главным запросом: чем они отличаются.
| Запись | Официальный | Авторизация | Звезды репозитория | Главное отличие |
|---|---|---|---|---|
| Agent Skills for VRChat UdonSharp (эта запись) | нет | 341 | ||
| MCP for Unity | нет | не нужна | 15 502 | управляет редактором Unity из агента через MCP: сцены и объекты, C#-скрипты, ассеты, тесты, профилирование и сборка |
| Unity Skills | нет | 1 171 | официальный набор скиллов Unity для агентов: работа с редактором, сборки, 2D и 3D, UI, URP, звук, мультиплеер и монетизация |
Коротко о README
Описание начинается с таблицы типичных проблем ИИ-кода для UdonSharp и решений, затем оговаривает границы набора: он не включает SDK, не содержит проекта Unity и не заменяет официальную документацию. Дальше идут три способа установки, структура папок, таблицы по двум скиллам, три файла правил, дерево решений для синхронизации, таблица проверок хуков и таблица версий SDK. В конце даны ссылки на официальные ресурсы VRChat, список помощников сообщества, отказ от связи с VRChat Inc. и правила для сообщений об ошибках. Рядом лежат `CHANGELOG.md`, `SECURITY.md` и переводы описания.
Бейдж для README
Исходный SKILL.md
---
name: unity-vrc-udon-sharp
description: >-
UdonSharp scripting skill for VRChat SDK 3.10.5 (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 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, optimization, and
upload; route those requests to unity-vrc-world-sdk-3.
license: MIT
metadata:
author: niaka3dayo
version: "4.1.1"
tags: vrchat, udonsharp, udon, networking, sync, persistence, dynamics, asmdef, vpm, assembly-definition
---
# 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.
- **What do late joiners see?** State set only by one-time events (`SendCustomNetworkEvent`) is invisible to late joiners. Late-joiner-visible state must live in `[UdonSynced]` variables, which are delivered automatically via `OnDeserialization`; no manual `RequestSerialization()` on join is needed.
- **What if the owner leaves mid-session?** VRChat automatically transfers ownership to a remaining player (selection rule is not publicly documented), and `OnOwnershipTransferred` fires on all clients. Synced variables are preserved, so state is not frozen; decide upfront whether to keep the current value, reset to a known default, or re-apply/re-broadcast derived state in `OnOwnershipTransferred`.
## Context Preservation
For complex synced systems, ownership-sensitive refactors, or work resumed after compaction/handoff, consider loading `references/context-preservation.md`.
It provides a lightweight task-context note for source of truth, transport, sync mode, storage, ownership, late-joiner behavior, and validation rationale.
This is optional guidance for complex work, not a step for small mechanical edits.
Keep private data and raw transcripts out of any note.