关于 Unity Editor Tools
Unity Editor Tools 是用于生成 Unity 自定义编辑器扩展的技能,可加快开发工作流。它涵盖自定义 Inspector、属性绘制器、工具窗口、菜单操作、向导和资源导入处理。
主要功能
- 01生成 CustomEditor 检视面板
- 02创建 PropertyDrawer 控件
- 03构建 EditorWindow 工具
- 04添加 MenuItem 操作
- 05创建 ScriptableWizard 向导
- 06使用 AssetPostprocessor 处理资源
适用场景
- 01定制组件的 Inspector
- 02添加专用编辑器工具窗口
- 03自动化常用菜单操作
- 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
快速开始
- 确定要在 Editor 中加快的工作流
- 通过决策树选择工具类型
- 检查 Editor 程序集结构
- 使用合适的模板生成脚本
- 在 Unity 中进行视觉检查
决策树
要创建哪种 Editor 工具?
| 需求 | 类型 | 基类 |
|---|---|---|
| 自定义 Inspector 中组件的显示方式 | CustomEditor | Editor |
| 自定义特定字段类型的呈现方式 | PropertyDrawer | PropertyDrawer |
| 创建独立的工具窗口 | EditorWindow | EditorWindow |
| 在菜单中添加快捷操作 | MenuItem | 静态属性 |
| 创建分步向导 | ScriptableWizard | ScriptableWizard |
| 在导入时处理资源 | AssetPostprocessor | AssetPostprocessor |
分步指南
步骤 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+,自动绑定 |
| PropertyDrawer | PropertyDrawer | 自定义字段类型的呈现方式 |
| EditorWindow | EditorWindow | 带标签页和工具栏的工具窗口 |
| MenuItem | 静态属性 | Unity 菜单中的快捷操作 |
对于 Unity 6+,复杂的 EditorWindow 和 CustomEditor 优先使用 UI Toolkit,而不是 IMGUI。简单的 PropertyDrawer 仍可使用 IMGUI。
步骤 4:视觉检查
生成脚本后:
- 确认文件位于正确的目录(
Assets/Scripts/Editor/或Assets/Editor/) - 确认没有编译错误:检查是否缺少依赖项
- 确认包含
using UnityEditor; - 确认脚本没有从 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 中出现 NullReferenceException | FindProperty() 中的属性名称与 [SerializeField] 字段不匹配(区分大小写) |
| PropertyDrawer 未生效 | 确认 [CustomPropertyDrawer(typeof(T))] 特性指向正确的类型,而不是字段 |
Multiple editors 警告 | 有两个 CustomEditor 指向同一类型。在整个项目中搜索 CustomEditor(typeof(X)) |
| MenuItem 显示为灰色 | Validate 方法返回了 false。检查验证条件 |
| 更改无法撤销(Ctrl+Z) | 在每次直接修改之前添加 Undo.RecordObject() |
评论
支持 Markdown