スポンサーリンク
UnityUnityメモ

Unityエディタ拡張入門|Inspector拡張とEditorWindowで開発用ツールを自作する方法

Unity

はじめに

Unityでゲームを作っていると、「この作業、毎回同じことやってない?」って思う瞬間、ありませんか? Inspectorでの数値調整、設定チェック、データの入力……。 ひとつひとつは単純なのに、積み重なると意外と時間を取られてしまうんですよね。

実はこういった開発中の“地味だけど面倒な作業”は、Unityのエディタ拡張を使うことで、かなり楽にできます。 エディタ拡張というと「難しそう」「上級者向け」というイメージを持たれがちですが、基本を押さえれば、初心者でも十分に扱える技術なんです。

この記事では、Unityで開発用ツールを自作するための入門として、 Inspector拡張EditorWindowを中心に、 「何ができるのか」「どう考えて作るのか」をやさしく解説していきます。

いきなり大きなツールを作る必要はありません。 まずは「これ、毎回手作業でやるの面倒だな」というポイントを、自分のために少しだけ便利にする。 それだけでも、Unity開発の快適さはびっくりするほど変わりますよ😊

Inspector拡張とEditorWindowの基本を理解しつつ、 「自作する場合」と「便利な既存ツールを使う場合」の考え方も紹介するので、 これから開発効率を上げたい方は、ぜひ最後まで読んでみてください。


1. Unity開発で発生しがちな“非効率な作業”とは

Unityでの開発が進んでくると、ゲームの仕組みそのものよりも、周辺作業に時間を取られていると感じることが増えてきます。 特に個人開発や少人数チームでは、この影響がかなり大きいです。

たとえば、こんな作業に心当たりはありませんか?

  • Inspectorで同じようなパラメータを何十個も手入力している
  • 設定漏れが原因で、実行してからエラーに気づく
  • テスト用のオブジェクトを毎回手作業で配置・削除している
  • データ調整のたびにPrefabを開いて数値を直している

これらはすべて、「やっていること自体は難しくない」けれど、 回数が多く、ミスも起こりやすい作業です。 しかも、ゲームとしての面白さには直接つながりません。

問題なのは、こうした作業が積み重なることで、 本来集中したいはずのロジック設計や演出作りの時間が削られてしまうことです。 気づかないうちに、「作る」より「整える」時間のほうが長くなってしまうんですね。

ここで活躍するのが、Unityのエディタ拡張です。 エディタ拡張を使えば、 手作業でやっていたことをボタンひとつで実行したり、 そもそもミスが起きないUIを用意したりできます。

「全部自動化しないと意味がない」わけではありません。 ほんの小さな改善でも、毎日の作業に効いてきます。 次の章では、その第一歩として、エディタ拡張の基本構造を整理していきましょう。




2. エディタ拡張の基本構造を理解しよう

エディタ拡張に挑戦する前に、まずは「どこに」「何を書くのか」という基本構造を押さえておきましょう。 ここを理解しておくと、あとでコードを見たときに迷いにくくなります。

Editorフォルダの役割

Unityのエディタ拡張用スクリプトは、必ずAssets/Editorフォルダの中に配置します。 このフォルダに入ったスクリプトは、ゲーム実行時やビルドには含まれません。

つまり、

  • エディタ専用の処理を書ける
  • ランタイム用コードと分離できる
  • ビルドエラーを防げる

というメリットがあります。 「エディタでしか使わないコードはEditorフォルダへ」 これはエディタ拡張の大原則です。

UnityEditor名前空間を使う

エディタ拡張では、スクリプトの先頭に次の記述が必要になります。

using UnityEditor;

これを書くことで、EditorEditorWindowEditorGUILayout などのエディタ専用APIが使えるようになります。 逆に、これがないとエディタ拡張は書けません。

ゲームスクリプトとの違い

ここで一度、通常のゲームスクリプトとの違いを整理しておきましょう。

  • ゲームスクリプト:実行時の挙動を制御する(プレイヤー、敵、UIなど)
  • エディタスクリプト:開発中の作業を支援する(設定、確認、生成、整理など)

エディタ拡張は「ゲームをどう動かすか」ではなく、 「ゲームをどう作るか」を助けるためのコードです。 この視点を持つと、ツールのアイデアがぐっと浮かびやすくなります。

次は、実際にエディタ拡張で最も触れる機会が多い Inspector拡張から見ていきましょう。




3. Inspector拡張の基本(最初の一歩)

エディタ拡張の中でも、最初に触れることが多いのがInspector拡張です。 これは、既存のコンポーネントのInspector表示をカスタマイズして、 より使いやすくする仕組みになります。

Inspector拡張が便利なのは、 「普段使っている画面を、そのまま強化できる」ところ。 新しいウィンドウを作らなくても、作業効率を一気に上げられます。

EditorクラスとCustomEditor

Inspector拡張を作るときは、MonoBehaviourではなく、 Editorクラスを継承します。

そして、どのコンポーネントのInspectorを拡張するかを、 [CustomEditor] 属性で指定します。

[CustomEditor(typeof(SampleComponent))]
public class SampleComponentEditor : Editor
{
}

これだけで、「このコンポーネント専用のInspectorを作りますよ」 という宣言になります。

OnInspectorGUIの役割

Inspectorの見た目や挙動を定義するのが、 OnInspectorGUI() メソッドです。

この中にUIの描画処理を書いていきます。 Inspectorが表示されるたびに、このメソッドが呼ばれるイメージです。

public override void OnInspectorGUI()
{
    base.OnInspectorGUI();
}

base.OnInspectorGUI() を呼ぶことで、 もともとのInspector表示をそのまま残せます。 まずはこれを呼んだ状態で、あとからUIを追加するのがおすすめです。

EditorGUILayoutでUIを追加する

Inspector拡張では、EditorGUILayoutを使ってUIを作るのが一般的です。 レイアウトを自動で調整してくれるので、細かい座標指定は不要です。

たとえば、ボタンを追加する場合はこんな感じになります。

if (GUILayout.Button("実行"))
{
    Debug.Log("ボタンが押されました");
}

これだけで、Inspectorにボタンが1つ増えます。 クリックしたときに処理をまとめて実行できるので、 「設定後に毎回やっている操作」をボタン化するだけでも、 かなり楽になりますよ。




4. Inspector拡張を“爆速化”する選択肢

ここまでで、Inspector拡張の基本的な仕組みは見えてきたと思います。 ただ、実際に作り始めると、こんな気持ちになる人も多いです。

  • ちょっとしたUIを追加するだけでもコード量が増える
  • 見た目を整えるのに意外と時間がかかる
  • 本当は「設定しやすくしたい」だけなのに、実装に悩む

そんなときに知っておいてほしいのが、 Inspector拡張を一気に楽にしてくれる既存ツールの存在です。

Odin Inspector & Serializer を使うと何が変わるのか

Odin Inspector & Serializerは、 UnityのInspectorを大幅に強化してくれる定番のエディタ拡張アセットです。 最大の特徴は、Attribute(属性)を付けるだけで、Inspectorを柔軟にカスタマイズできる点にあります。

たとえば、

  • ボタンを追加したい
  • 入力できる値の範囲を制限したい
  • 条件によって表示・非表示を切り替えたい

といったことが、Inspector専用のEditorクラスを書かなくても実現できます。 「UIを作るためのコード」よりも、「何をしたいか」に集中できるのが大きなメリットです。

特に、 エディタ拡張に慣れていない段階や、 チームで使うツールを素早く用意したい場合には、 非常に相性がいい選択肢になります。

Odin Inspector & Serializer
Asset Storeでチェックする

もちろん、すべてをOdinに任せる必要はありません。 自作Inspectorでしか実現できない処理と、 Odinで十分な部分を使い分けるのが理想的です。

「まずはOdinで楽をする → 必要になったら自作する」 この順番でも、エディタ拡張の理解はちゃんと深まりますよ。

次は、Inspectorとは別のアプローチとして、 独自のツール画面を作れるEditorWindowについて見ていきましょう。




5. 簡易EditorWindowを作ってみよう

Inspector拡張はとても便利ですが、 「複数のオブジェクトにまとめて処理をかけたい」 「専用の作業画面がほしい」 という場面では、少し物足りなく感じることがあります。

そんなときに活躍するのが、 EditorWindowを使った独自ウィンドウです。 Unityエディタに、自分専用のツール画面を追加できます。

EditorWindowとは?

EditorWindowは、 エディタ上に常駐するツール用ウィンドウを作るための仕組みです。 メニューから開ける専用画面を用意できるので、 チェックツールや一括処理ツールと相性がとても良いです。

クラスの作成と継承

EditorWindowを作る場合も、スクリプトはEditorフォルダ内に作成します。 そして、MonoBehaviourではなく、 EditorWindowクラスを継承します。

public class SampleEditorWindow : EditorWindow
{
}

この時点では、まだ何も表示されません。 次に、このウィンドウをエディタのメニューから開けるようにします。

メニューに項目を追加する

EditorWindowは、[MenuItem]属性を使って、 Unity上部のメニューバーに登録します。

[MenuItem("Tools/Sample Window")]
static void Open()
{
    GetWindow<SampleEditorWindow>();
}

これで、Unityのメニューから Tools → Sample Window を選ぶと、ウィンドウが表示されるようになります。

OnGUIでUIを作る

EditorWindowの中身を作る基本は、 OnGUI()メソッドです。 ここにUIの描画処理を書いていきます。

void OnGUI()
{
    if (GUILayout.Button("処理を実行"))
    {
        Debug.Log("実行されました");
    }
}

Inspector拡張と同じ感覚でUIを書けるので、 すでに触ったことがある人は、すぐに慣れると思います。

EditorWindowは、 「今、どのオブジェクトを触っているか」に依存しない作業を まとめるのに向いています。

次のセクションでは、 EditorWindowやInspector拡張でよく使う GUIパーツをもう少し詳しく見ていきましょう。




6. GUIパーツを使った実践的なUI構築

Inspector拡張やEditorWindowでは、 さまざまなGUIパーツを組み合わせてツールを作っていきます。 ここでは、実務でよく使うものを中心に紹介します。

基本的には、EditorGUILayoutGUILayout を使えばOKです。 レイアウトを自動で調整してくれるので、細かい座標計算は不要です。

テキスト入力(TextField)

文字列を入力したい場合は、EditorGUILayout.TextFieldを使います。

string text = EditorGUILayout.TextField("名前", text);

ツール名の指定や、検索キーワードの入力などでよく使います。

数値調整(Slider)

数値を安全に調整したい場合は、スライダーが便利です。

value = EditorGUILayout.Slider("値", value, 0f, 100f);

入力範囲を制限できるので、 想定外の数値が入るのを防げるのがポイントです。

オブジェクト選択(ObjectField)

GameObjectやアセットを指定したい場合は、 EditorGUILayout.ObjectFieldを使います。

targetObject = EditorGUILayout.ObjectField(
    "対象",
    targetObject,
    typeof(GameObject),
    true
) as GameObject;

PrefabやScriptableObjectを指定させたいときにも重宝します。

ボタン操作(Button)

ツールの「実行トリガー」になるのがボタンです。

if (GUILayout.Button("実行"))
{
    // 処理を書く
}

複雑な処理でも、ボタンひとつにまとめることで、 操作ミスを防ぎやすくなります。

レイアウト制御(Vertical / Horizontal)

UIを見やすく整理したい場合は、 レイアウトグループを使います。

EditorGUILayout.BeginVertical("box");
// UIパーツ
EditorGUILayout.EndVertical();

Horizontalと組み合わせることで、 ツールらしい見た目を簡単に作れます。

GUIパーツを覚えてくると、 「あ、この作業はツール化できそう」 という発想がどんどん浮かんできます。

次は、エディタ拡張でよく話題に上がる IMGUIとUI Toolkitの違いについて整理していきましょう。




7. IMGUIとUI Toolkitの使い分け

エディタ拡張について調べていると、 IMGUIUI Toolkit という2つのUI方式が出てきます。 ここで混乱する人はとても多いです。

結論から言うと、 どちらが正解というわけではなく、用途で使い分けるのがベストです。

IMGUIとは?

IMGUIは、OnGUI()内でコードを書いてUIを描画する、 Unityで長く使われてきた方式です。

  • コードだけで完結する
  • 学習コストが低い
  • 小〜中規模ツールに向いている

Inspector拡張や簡易EditorWindowの多くは、 今でもIMGUIで作られています。 「まず触るならIMGUI」で問題ありません。

UI Toolkitとは?

UI Toolkitは、UXMLやUSSといった HTML / CSSに近い仕組みでUIを構築する、比較的新しい方式です。

  • UI構造とロジックを分離しやすい
  • 複雑なレイアウトに強い
  • 大規模・長期運用ツール向き

ノードベースツールや、 見た目をしっかり作り込みたい場合に力を発揮します。

初心者はどちらを選ぶべき?

迷ったら、まずはIMGUIでOKです。 本記事で紹介しているInspector拡張やEditorWindowも、 IMGUIベースで十分実用的なツールが作れます。

UI Toolkitは、 「ツールが育ってきた」「規模が大きくなった」 という段階で検討すると、ちょうどいいです。

次は、エディタ拡張を実務で使うときに つまずきやすいポイントと、 長く使えるツールにするためのコツをまとめます。




8. 実務で困りやすいポイントと設計のコツ

エディタ拡張は「作って終わり」になりがちですが、 実務で本当に役立つツールにするには、 いくつか押さえておきたいポイントがあります。

ここでは、実際によくハマりやすい点と、 長く使えるツールにするための考え方を紹介します。

ホットリロードで値が消える問題

スクリプトを保存したり、再生モードを切り替えたりすると、 EditorWindowの状態がリセットされることがあります。

これを防ぐために、 [SerializeField] を使って、 ウィンドウ内の状態をシリアライズしておくのがおすすめです。

「今どの設定で作業していたか」を保持できるだけで、 ツールの使い勝手はかなり良くなります。

EditorWindowのライフサイクルを意識する

EditorWindowには、いくつかのライフサイクルメソッドがあります。

  • OnEnable():ウィンドウが読み込まれたとき
  • Update():エディタ更新時
  • OnDisable():ウィンドウが閉じられたとき

初期化処理や後始末を適切な場所に書くだけで、 バグや想定外の挙動を減らせます。

「全部盛り」にしない

便利にしようとして、 ひとつのツールに機能を詰め込みすぎるのもよくある失敗です。

エディタ拡張は、 「ひとつの目的に特化した小さなツール」のほうが、 結果的に長く使われます。

チームで使う場合の注意点

チーム開発では、 自分だけが分かるツールにならないように注意が必要です。

  • ボタン名やラベルは分かりやすくする
  • 危険な操作には確認を入れる
  • 使い方が直感的になるようにする

「説明しなくても使える」ツールを目指すと、 エディタ拡張の価値は一気に上がります。




まとめ

Unityのエディタ拡張は、特別な人だけが使う高度な技術ではありません。 むしろ、開発を続けていくほど「必要性」を実感しやすいスキルです。

Inspector拡張やEditorWindowを使うことで、 これまで手作業で行っていた設定や確認作業を、 安全かつ効率的にまとめることができます。

大切なのは、最初から完璧なツールを作ろうとしないことです。 「この作業、面倒だな」と感じたポイントを、 少しだけ便利にするところから始めてみてください。

また、自作にこだわりすぎないのも重要です。 既存のエディタ拡張アセットを上手に使うことで、 開発スピードを大きく上げることができます。 自作ツールと既存ツールを組み合わせることで、 無理なく、実務的なエディタ環境を作れます。

エディタ作業が快適になると、 本来集中したいゲームの面白さを作る時間が増えていきます。 ぜひ、小さなエディタ拡張からチャレンジしてみてください。


あわせて読みたい


参考文献


よくある質問(FAQ)

Q
エディタ拡張は初心者には難しくないですか?
A

難しそうに見えますが、実際はそこまでハードルは高くありません。 Inspector拡張や簡単なEditorWindowであれば、 既存のコードを少し真似しながらでも十分に作れます。
まずは「ボタンを1つ追加する」「まとめて処理する」といった 小さな改善から始めるのがおすすめです。 使いながら覚えていく感覚で問題ありません。

Q
Odin Inspectorを使うと、自作スキルは身につかなくなりませんか?
A

そんなことはありません。 Odin Inspectorは「楽をするためのツール」ですが、 何をどう見せたいかを考える力は変わらず必要です。

むしろ、UI構築の手間が減る分、 ツール設計や処理内容に集中できるようになります。 必要になったタイミングで自作Inspectorに切り替えるのも、自然な流れです。

Q
チーム開発でエディタ拡張を使うときの注意点はありますか?
A

チームで使う場合は、 「説明しなくても使えるか」を意識するのが大切です。

ボタン名やラベルを分かりやすくする、 危険な操作には確認ダイアログを入れるなど、 少しの工夫でトラブルを防げます。 エディタ拡張は、チーム全体の作業を支える道具として考えると失敗しにくいです。

※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。

※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。

スポンサーリンク