Unity Editor Tools について
Unity Editor Toolsは、開発ワークフローを効率化するUnityエディター拡張の生成を支援するスキルです。インスペクター、プロパティドロワー、ウィンドウ、メニュー操作、ウィザード、アセット処理を扱います。
主な機能
- 01CustomEditorインスペクターの生成
- 02PropertyDrawerコントロールの作成
- 03EditorWindowツールの構築
- 04MenuItemアクションの追加
- 05ScriptableWizardワークフローの作成
- 06AssetPostprocessorによるアセット処理
活用シーン
- 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 エディター用のカスタムツールを生成します。CustomEditor、PropertyDrawer、EditorWindow、MenuItem、ScriptableWizard、AssetPostprocessor など、あらゆる種類のエディター拡張に対応しています。
前提条件
Assets/Scripts/がすでに存在する Unity プロジェクト- ツール化するコンポーネントまたはワークフローに関する知識
- Unity MCP への依存なし:Read、Write、Edit、Grep、Glob、Bash のみを使用します
クイックスタート
- エディターで効率化するワークフローを特定します
- 意思決定ツリーからツールの種類を選択します
- Editor アセンブリの構成を確認します
- 適切なテンプレートを使ってスクリプトを生成します
- Unity で視覚的に確認します
意思決定ツリー
どの種類のエディターツールを作成しますか?
| ニーズ | 種類 | 基底クラス |
|---|---|---|
| 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 が存在しない場合は、Assets/Scripts/ 内を Glob で確認し、必要であれば作成します。
ステップ 3:エディタースクリプトを生成する
利用可能なテンプレートは references/editor-templates.md にあります。
| テンプレート | 基底クラス | 用途 |
|---|---|---|
| CustomEditor(IMGUI) | Editor | バージョンを問わず使用できるカスタム Inspector |
| CustomEditor(UI Toolkit) | Editor | 複雑な Inspector、バインディングを自動化 |
| PropertyDrawer | PropertyDrawer | フィールド型のカスタム描画 |
| EditorWindow | EditorWindow | タブとツールバーを備えたツールウィンドウ |
| MenuItem | 静的属性 | Unity メニューのクイックアクション |
Unity 6 以降では、複雑な EditorWindow と CustomEditor には IMGUI より UI Toolkit を優先してください。シンプルな PropertyDrawer では、引き続き IMGUI を使用できます。
ステップ 4:視覚的な確認
スクリプトの生成後:
- ファイルが正しいフォルダー(
Assets/Scripts/Editor/またはAssets/Editor/)にあることを確認します - コンパイルエラーがないことを確認します。不足している依存関係を探します
using UnityEditor;が含まれていることを確認します- スクリプトが Runtime アセンブリから 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/のルートにエディターファイルを作成してはいけません
関連スキル
- Inspector を作成する前にコンポーネントを生成しますか?
/unity-code-gen(Unity Code Gen)を使用します - ランタイム UI(エディターではない UI)を作成しますか?
/uitk(Unity UI Toolkit)を使用します - エディターツールをテストしますか?
/unity-test(Unity Test)を使用します
トラブルシューティング
| 問題 | 解決策 |
|---|---|
The type or namespace 'Editor' could not be found | スクリプトが Editor フォルダーにないか、アセンブリ定義に includePlatforms: ["Editor"] がありません |
| カスタム Inspector が表示されない | typeof(TargetComponent) が対象の型と完全に一致していること、およびスクリプトがコンパイルされることを確認します |
OnEnable で NullReferenceException が発生する | FindProperty() のプロパティ名が [SerializeField] フィールド名と一致していません(大文字と小文字を区別します) |
| PropertyDrawer が適用されない | 属性 [CustomPropertyDrawer(typeof(T))] がフィールドではなく、正しい型を対象にしていることを確認します |
Multiple editors 警告 | 2 つの CustomEditor が同じ型を対象にしています。プロジェクト全体で CustomEditor(typeof(X)) を grep します |
| MenuItem がグレー表示される | Validate メソッドが false を返しています。検証条件を確認します |
| 変更を元に戻せない(Ctrl+Z) | 直接変更を加える前に Undo.RecordObject() を追加します |