mcpField
U
Unity Code Gen

Unity Code Gen

github.com/juliankerignard开发854 次安装32 周前更新
代码仓库

关于 Unity Code Gen

用于在现有 Unity 项目中生成 C# 代码和 NUnit 测试的技能。它会先检查项目结构与惯例,再选择模式并将生成文件放入相应位置。

主要功能

  1. 01检查 Unity 项目结构与惯例
  2. 02通过决策树选择模式
  3. 03生成带 Unity 属性的 C# 代码
  4. 04创建对应的 NUnit 测试
  5. 05将文件放入项目目录

适用场景

  1. 01为现有 Unity 项目添加功能
  2. 02生成符合项目惯例的组件
  3. 03随生成代码一并创建测试

MCP 相关

此技能无需 Unity MCP 服务,而是使用 Claude Code 工具检查和编辑项目文件。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/juliankerignard/unity-skills --skill unity-code-gen

安装后在 Claude Code 中输入/unity-code-gen确认已加载。

附带文件references/code-templates.md

详细介绍

Unity 代码生成

生成可用于生产环境的 Unity C# 代码。分析现有项目,选择合适的模式,生成代码和测试。

此技能的功能

  1. 分析需求(功能、系统、组件类型)
  2. 检查现有代码库(约定、命名空间、程序集定义)
  3. 通过决策树选择架构模式
  4. 使用合适的 Unity 属性生成整洁的 C# 代码
  5. 生成相应的单元测试(NUnit)
  6. 将文件放入正确的目录

前置条件

  • 已有一个目录结构清晰的 Unity 项目
  • 可通过 Claude Code 工具(Read、Write、Edit、Grep、Glob)访问项目文件
  • 无需依赖 Unity MCP

快速开始

  1. 用户描述所需的功能或组件
  2. 使用 Glob/Grep 检查项目,了解现有约定
  3. 应用决策树选择模式
  4. 在正确的目录中生成代码和测试

决策树

La chose a creer...
│
├─ Stocke des donnees configurables (stats, settings) ?
│  └─ OUI → ScriptableObject Data Container
│
├─ Sert de canal de communication entre systemes ?
│  └─ OUI → ScriptableObject Event Channel
│
├─ Vit sur un GameObject dans la scene ?
│  ├─ Controle du comportement runtime ? → MonoBehaviour
│  └─ Juste un data holder sur un GO ? → MonoBehaviour simple (struct-like)
│
├─ Definit un contrat que plusieurs classes implementent ?
│  └─ OUI → Interface (+ implementations MonoBehaviour ou pure C#)
│
├─ Logique pure sans dependance Unity (math, algo, parsing) ?
│  └─ OUI → Pure C# class (pas de MonoBehaviour)
│
├─ Utilitaire stateless reutilisable ?
│  └─ OUI → Static class ou extension methods
│
├─ Gestion d'etats discrets (joueur, IA, game flow) ?
│  └─ OUI → State Machine (enum + switch ou state classes)
│
├─ Gestion d'inputs avec undo/replay ?
│  └─ OUI → Command Pattern
│
├─ Objets crees/detruits frequemment (projectiles, VFX) ?
│  └─ OUI → Object Pool
│
├─ Logique asynchrone (chargement, timer, sequence) ?
│  └─ OUI → Async Awaitable Component (Unity 6+)
│
└─ Milliers d'entites similaires a traiter en parallele ?
   └─ OUI → ECS (DOTS) — hors scope de cette skill

分步指南

第 1 步 — 分析需求

明确以下内容:

  • 内容:功能、系统、组件、数据容器、事件?
  • 位置:项目中的哪个模块?哪个程序集定义?
  • 交互:与哪些现有系统交互?
  • 数据:处理、持久化和序列化哪些数据?
第 2 步 — 检查现有代码库

在编写任何代码之前,始终执行以下搜索:

Glob("Assets/**/*.asmdef")              → assembly definitions, structure modules
Glob("Assets/**/*.cs", limit aux dossiers cibles) → fichiers existants
Grep("namespace ", type: "cs")           → conventions de namespace
Grep("class .* : MonoBehaviour", type: "cs") → MonoBehaviours existants
Grep("class .* : ScriptableObject", type: "cs") → SOs existants
Grep("\\[SerializeField\\]", fichier cible)  → style de serialisation

识别:

  • 命名模式(私有字段使用 _camelCase?是否有前缀?)
  • 命名空间结构(Game.Core、Game.Player 等)
  • 属性约定([Header]、[Tooltip]、[Range])
  • 已使用的模式(事件、接口、状态机)
第 3 步 — 选择模式

应用上方的决策树。如有疑问,优先选择组合和简单模式。

第 4 步 — 生成 C# 代码

始终遵循以下 Unity 约定:

必需属性:

  • 对 Inspector 中可编辑的字段使用 [SerializeField] private(绝不使用 public)
  • 当脚本依赖其他组件时,使用 [RequireComponent(typeof(X))]
  • 使用 [Header("Section")] 按逻辑分组整理 Inspector
  • 对不明显的字段使用 [Tooltip("Explication")]
  • 对有界数值使用 [Range(min, max)]

文件结构:

// 1. Namespace
// 2. Attributs de classe ([RequireComponent], [DisallowMultipleComponent])
// 3. Declaration de classe
// 4. Constantes
// 5. [SerializeField] champs groupes par [Header]
// 6. Events publics
// 7. Proprietes publiques (read-only si possible)
// 8. Champs prives
// 9. Awake / OnEnable / Start
// 10. OnDisable / OnDestroy
// 11. Update / FixedUpdate (si necessaire)
// 12. Methodes publiques
// 13. Methodes privees
// 14. Coroutines

**命名空间:**与现有结构匹配。如果项目使用 Game.Player,不要另行创建 MyNamespace.Scripts。

第 5 步 — 生成测试

为每个生成的文件创建对应的测试:

  • EditMode 测试:纯逻辑、计算、状态机、数据验证
  • PlayMode 测试:MonoBehaviour 行为、组件交互、协程

测试位置:

Assets/Tests/EditMode/  → tests logique (assembly ref: Game.Core, etc.)
Assets/Tests/PlayMode/  → tests comportement (assembly ref + UnityEngine.TestRunner)
第 6 步 — 放置文件
  • 遵循程序集定义和现有目录结构
  • 测试放入对应的 Tests/ 镜像目录
  • 生成内容:C# 源文件、NUnit 测试、摘要(所选模式、创建的文件)

严格规则

始终:

  • 生成代码前检查现有代码库(Glob + Grep)
  • 遵循项目的命名约定
  • 编写代码的同时生成测试
  • Inspector 字段使用 [SerializeField] private
  • 使用与项目结构一致的命名空间
  • 添加 [Header] 和 [Tooltip],提升 Inspector 的可读性
  • 优先使用组合,而非继承
  • 在 OnDisable 或 OnDestroy 中取消订阅事件

绝不:

  • 不检查现有项目就编写代码
  • 使用 MonoBehaviour 单例模式(优先使用 SO 或 Service Locator)
  • 使用 public 字段(使用 [SerializeField] private + 属性)
  • 使用带字符串参数的 Find*() 或 SendMessage()
  • 在 Update() 中编写逻辑却不缓存引用
  • 生成代码却不编写测试
  • 创建超过 500 行的文件(应拆分模块)
  • 硬编码魔法值(使用 SO 或 const)

相关技能

  • 想要快速制作原型且不需要架构?使用 /proto(Unity Rapid Proto)
  • 想要重构现有代码?使用 /unity-refactor(Unity Refactor)
  • 想要为生成的组件创建自定义 Inspector?使用 /unity-editor-tools(Unity Editor Tools)
  • 想要生成并运行 NUnit 测试?使用 /unity-test(Unity Test)
  • 想要生成音频系统?使用 /unity-audio(Unity Audio)
  • 想要实现存档?使用 /unity-save(Unity Save System)

故障排除

问题解决方案
项目中没有明确的约定使用 Unity 标准约定(_camelCase、PascalCase),并建立一致的模式
没有现成的程序集定义在主目录中生成代码;如果项目规模扩大,建议创建 asmdef
命名空间没有对应的内容使用项目名称 + 模块,例如:ProjectName.Module
由于代码耦合,无法进行测试将逻辑提取到可测试的纯 C# 类中,让 MonoBehaviour 仅负责“胶合”
项目中到处都在使用单例不要再添加新的单例;建议逐步迁移到 SO/Service Locator
与第三方包发生命名冲突在命名空间前加上项目名称

详细代码模板:参见 references/code-templates.md。

评论

支持 Markdown