Unityでゲーム開発をしていると、「ちょっとしたデバッグが面倒」「変数の中身をすぐ確認したい」と感じることはありませんか?
そんな時に便利なのが、Inspectorのカスタム表示(Inspector拡張)です。
特別なツールを入れなくても、Unity標準のAPIだけで、「変数の状態をわかりやすく表示する」「ボタンを押して関数を実行する」といった便利なデバッグ環境を作ることができます。
この記事では、最も基本的なカスタムInspectorの書き方と、すぐに役立つ応用例をご紹介します。
なぜInspector拡張が便利なのか?
Unityの開発では、「コンソールにDebug.Logを打ちまくる」スタイルに陥りがちですが、それだと次のような問題が出てきます。
- 実行中のデータが見えづらい
- ボタン操作で即時実行できない
- Debug.Logを仕込むだけのコンパイル地獄に陥る
こうした悩みは、Inspectorを拡張して、Unityエディター内に“デバッグツール”を作る感覚で解決できます。「この値を編集したら即反映」「このボタンを押すと処理が走る」といった機能を、自作クラスの横に追加できるわけです。
例えばRPGを製作しているとき、Inspectorに「レベルアップボタン」があったら便利じゃないですか。つまりは、そういうことです。
実装例:ボタンを押して関数を実行できるInspector
まずはよくある「ボタンを押すと関数が呼ばれる」Inspectorを作ってみましょう。
スクリプト①:DebugExample.cs
まずは、本体スクリプトを作成します。今回は DebugExample.cs
という名前にしました。
using UnityEngine;
public class DebugExample : MonoBehaviour
{
public int counter = 0;
public void AddCounter()
{
counter++;
Debug.Log("Counter is now: " + counter);
}
}
このスクリプトを、シーン内の適当なGameObjectにアタッチしておきます。
これで本体の準備は完了。
このクラスに、Inspectorから AddCounter()
を実行するボタンを追加していきます。
スクリプト②:DebugExampleEditor.cs(Editor拡張クラス)
次にEditor拡張クラスを作ります。
Editor拡張クラスはEditorフォルダ内に配置する必要がありますので、Assetsフォルダ直下に「Editor」フォルダが無い場合は、Editorフォルダを作成して下さい。
Editorフォルダ内に DebugExampleEditor.cs
を作ります。
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(DebugExample))]
public class DebugExampleEditor : Editor
{
public override void OnInspectorGUI()
{
// 元のInspectorを表示
DrawDefaultInspector();
// 対象スクリプトを取得
DebugExample script = (DebugExample)target;
// ボタンを追加
if (GUILayout.Button("カウントを増やす"))
{
script.AddCounter();
}
}
}
クラス名の右側が MonoBehaviour
ではなく、Editor
になっている事に注目。これで CustomEditor
クラスが作成できます。
動作確認

DebugExample
スクリプトをアタッチしたGameObjectをクリックすると、そのGameObjectのInspectorに「カウントを増やす」ボタンが表示されるようになります。
押すたびに数字がカウントアップしていきます。
Play中にこのボタンを押すだけで、コードをいじらずに関数を実行できるので、非常に快適です。
よくある使いどころ
- パラメータの変更・比較検証:実行中にInspectorで値を変えながら効果を確認
- 関数の手動実行:クールタイムリセットや強制終了処理など
- 開発中のテスト操作:敵を生成、ステージをスキップ、プレイヤーを無敵に…など
特にボタンによる関数実行は、UIやゲームロジックを試す時に非常に便利で、開発スピードが一段階上がる感覚があります。
確かにスクリプトを組む手間はありますが、それ以上の恩恵は必ずあります。
注意点と補足
Editor
スクリプトはEditor
フォルダ内に入れてください(そうしないとビルドに含まれてエラーになります)- あくまで 開発用/デバッグ用のツール なので、実際のゲームプレイ中に使う設計にはしないこと
OnInspectorGUI()
で直接値を変更してもUndo
が効かないケースがあります。必要に応じてUndo.RecordObject()
を使いましょう
まとめ:Inspector拡張は“作ってよかった”機能の代表格
一度仕組みを理解すれば、複雑なツールを使わなくてもUnityのエディターが一気に便利になります。
状況ごとの表示切り替えなども簡単に追加できるので、手軽で強力な開発効率化テクニックです。
今までCanvasにデバッグボタンを配置していた人は今すぐ実践しましょう。
今日紹介したような基礎から始めて、
あなたのプロジェクトにも“ちょっと賢いエディター”を加えてみてはいかがでしょうか?