mcpField
U
Unity Editor Tools

Unity Editor Tools

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

关于 Unity Editor Tools

Unity Editor Tools 是用于生成 Unity 自定义编辑器扩展的技能,可加快开发工作流。它涵盖自定义 Inspector、属性绘制器、工具窗口、菜单操作、向导和资源导入处理。

主要功能

  1. 01生成 CustomEditor 检视面板
  2. 02创建 PropertyDrawer 控件
  3. 03构建 EditorWindow 工具
  4. 04添加 MenuItem 操作
  5. 05创建 ScriptableWizard 向导
  6. 06使用 AssetPostprocessor 处理资源

适用场景

  1. 01定制组件的 Inspector
  2. 02添加专用编辑器工具窗口
  3. 03自动化常用菜单操作
  4. 04在资源导入时执行处理

安装

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

$npx skills add https://github.com/juliankerignard/unity-skills --skill unity-editor-tools

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

附带文件references/editor-templates.md

详细介绍

Unity Editor 工具

此技能的作用

此技能会为 Unity Editor 生成自定义工具,以加快开发工作流。它涵盖所有类型的 Editor 扩展:CustomEditor、PropertyDrawer、EditorWindow、MenuItem、ScriptableWizard 和 AssetPostprocessor。

先决条件

  • Unity 项目中已有 Assets/Scripts/ 结构
  • 了解要为其创建工具的组件或工作流
  • 不依赖 Unity MCP:仅使用 Read、Write、Edit、Grep、Glob、Bash

快速开始

  1. 确定要在 Editor 中加快的工作流
  2. 通过决策树选择工具类型
  3. 检查 Editor 程序集结构
  4. 使用合适的模板生成脚本
  5. 在 Unity 中进行视觉检查

决策树

要创建哪种 Editor 工具?

需求类型基类
自定义 Inspector 中组件的显示方式CustomEditorEditor
自定义特定字段类型的呈现方式PropertyDrawerPropertyDrawer
创建独立的工具窗口EditorWindowEditorWindow
在菜单中添加快捷操作MenuItem静态属性
创建分步向导ScriptableWizardScriptableWizard
在导入时处理资源AssetPostprocessorAssetPostprocessor

分步指南

步骤 1:确定要加快的工作流

分析用户需求。扫描现有组件:

Glob : Assets/Scripts/**/*.cs
Grep : "class.*MonoBehaviour" dans les fichiers trouves

关键问题:要让哪个组件更易于编辑?要自动化什么操作?缺少什么视觉反馈?

步骤 2:检查 Editor 程序集结构

生成代码前,检查 Editor 基础结构是否存在:

1. Glob : Assets/**/Editor/*.asmdef OR Assets/**/Editor.asmdef
2. Si absent : creer le dossier Assets/Scripts/Editor/
3. Creer Game.Editor.asmdef avec reference a Game.Runtime
4. Verifier que le .asmdef cible uniquement la plateforme Editor

Game.Editor.asmdef 文件结构:

{
    "name": "Game.Editor",
    "rootNamespace": "",
    "references": ["Game.Runtime"],
    "includePlatforms": ["Editor"],
    "excludePlatforms": [],
    "allowUnsafeCode": false,
    "overrideReferences": false
}

如果不存在 Game.Runtime.asmdef,请使用 Glob 检查 Assets/Scripts/,并在必要时创建该文件。

步骤 3:生成 Editor 脚本

可用模板位于 references/editor-templates.md:

模板基类用途
CustomEditor(IMGUI)Editor自定义 Inspector,兼容所有版本
CustomEditor(UI Toolkit)Editor复杂的 Inspector,适用于 Unity 6+,自动绑定
PropertyDrawerPropertyDrawer自定义字段类型的呈现方式
EditorWindowEditorWindow带标签页和工具栏的工具窗口
MenuItem静态属性Unity 菜单中的快捷操作

对于 Unity 6+,复杂的 EditorWindow 和 CustomEditor 优先使用 UI Toolkit,而不是 IMGUI。简单的 PropertyDrawer 仍可使用 IMGUI。

步骤 4:视觉检查

生成脚本后:

  1. 确认文件位于正确的目录(Assets/Scripts/Editor/ 或 Assets/Editor/)
  2. 确认没有编译错误:检查是否缺少依赖项
  3. 确认包含 using UnityEditor;
  4. 确认脚本没有从 Runtime 程序集引用任何 Editor 类型

严格规则

  • 始终将 Editor 脚本放在 Assets/Scripts/Editor/ 或 Assets/Editor/
  • 始终使用 includePlatforms: ["Editor"] 的 Game.Editor 程序集定义
  • 始终在 CustomEditor 中使用 serializedObject.Update() 和 ApplyModifiedProperties()
  • 始终在通过按钮修改对象之前使用 Undo.RecordObject()
  • 始终在 PropertyDrawer 中使用 EditorGUI.BeginProperty/EndProperty
  • 绝不从 Runtime 程序集引用 Editor 代码
  • 绝不在 CustomEditor 中不进行类型转换就使用 target(使用 (T)target 或 serializedObject)
  • 绝不在 Drawer 中绘制子字段时遗漏 GUIContent.none
  • 绝不在 Assets/Scripts/ 根目录创建 Editor 文件

相关技能

  • 创建 inspector 前先生成组件?使用 /unity-code-gen(Unity Code Gen)
  • 创建运行时 UI(非 editor)?使用 /uitk(Unity UI Toolkit)
  • 测试 editor 工具?使用 /unity-test(Unity Test)

故障排查

问题解决方案
The type or namespace 'Editor' could not be found脚本不在 Editor 文件夹中,或 assembly def 缺少 includePlatforms: ["Editor"]
自定义 inspector 未显示确认 typeof(TargetComponent) 与目标类型完全匹配,且脚本能够编译
OnEnable 中出现 NullReferenceExceptionFindProperty() 中的属性名称与 [SerializeField] 字段不匹配(区分大小写)
PropertyDrawer 未生效确认 [CustomPropertyDrawer(typeof(T))] 特性指向正确的类型,而不是字段
Multiple editors 警告有两个 CustomEditor 指向同一类型。在整个项目中搜索 CustomEditor(typeof(X))
MenuItem 显示为灰色Validate 方法返回了 false。检查验证条件
更改无法撤销(Ctrl+Z)在每次直接修改之前添加 Undo.RecordObject()

评论

支持 Markdown