この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:atom
更新日時:2026-06-10 11:03:32

タイトル: インスペクターウィンドウ
SEOタイトル: Unity Inspector ウィンドウ完全ガイド(コンポーネント編集 / カスタム属性 / Editor 拡張)

この記事の要点
  • Inspector ウィンドウ = Hierarchy / Project で選択した GameObject やアセットのプロパティを編集するための画面
  • GameObject の Transform / Mesh Renderer / Collider / Rigidbody / Script 等のコンポーネントを一覧表示・編集
  • Script の public / [SerializeField] 変数が Inspector に出る。インスタンスごとに値を上書き可能
  • Lock アイコンで表示を固定、Debug Modeで private や非シリアライズ値も確認
  • カスタム属性 ([Header] / [Tooltip] / [Range] / [SerializeField]) と Editor Script (CustomEditor) で見た目を拡張

Inspector ウィンドウとは

Inspector ウィンドウは、Unity エディタで選択中のオブジェクトの中身を可視化・編集する画面です。Hierarchy で GameObject を選んだとき、Project ウィンドウでアセット(マテリアル、テクスチャ、Prefab、ScriptableObject 等)を選んだときに、その内部のすべてのフィールドがここに表示されます。

Unity の作業の 8 割は Inspector を介して行われると言ってよいほど中心的な UI です。コードを書かなくても Transform を動かす、マテリアルの色を変える、コンポーネントを足す、といった作業ができるのは Inspector のおかげです。

主な構成要素

項目場所説明
名前 / Tag / Layer / Active最上段GameObject 自体の基本属性
Transform必ず先頭Position / Rotation / Scale(削除不可)
各種コンポーネント順に積層Mesh Renderer / Collider / Script 等
Add Component ボタン一番下新規コンポーネント追加
Prefab Apply / Revert右上のオーバーライドPrefab に変更を反映 / 元へ戻す
Lock / Debug Mode右上アイコン選択固定 / 内部値表示

コンポーネントの右クリックメニュー

各コンポーネントのヘッダーを右クリックすると、頻出操作のショートカットが出ます:

  • Reset — フィールドを初期値に戻す(位置を 0,0,0、Scale を 1,1,1 等)
  • Remove Component — コンポーネント削除(Transform は不可)
  • Move Up / Move Down — 表示順入れ替え
  • Copy Component / Paste Component Values / Paste Component As New — 別 GameObject へ値ごとコピー
  • Properties... — 別ウィンドウとして切り離す
  • Edit Script — エディタ起動(Script コンポーネントの場合)

Lock アイコンの活用

右上の南京錠アイコンを押すと、別のオブジェクトを Hierarchy で選択しても Inspector の表示が固定されます。これは「A の値を B にドラッグしてコピーしたい」「複数の値を別ウィンドウで比較したい」ときに必須の機能です。

Inspector タブを右クリック → Add Tab → Inspector で 2 枚目を開き、片方を Lock すれば 2 オブジェクトを並べて編集できます。

Debug Mode

右上の三本線(メニュー)Debug を選択すると、Inspector が Debug モードに切り替わります。Normal モードとの違い:

NormalDebug
private フィールド非表示表示(読み取り専用)
SerializeField 属性無し非表示表示
カスタム Editor の見た目反映される無効(生フィールド)
RotationEuler 角Quaternion (x, y, z, w)
InstanceID / LocalIdentifier非表示表示

Script の Inspector 表示ルール

MonoBehaviour 派生クラスを GameObject にアタッチすると、フィールドの中でシリアライズ可能なものが自動的に Inspector に出ます。

using UnityEngine;

public class PlayerStatus : MonoBehaviour
{
    public int hp = 100;                  // ★ 出る (public)
    [SerializeField] private float speed = 5f;  // ★ 出る (SerializeField)

    private int internalCount;            // 出ない (private + SerializeField なし)
    public static int globalScore;        // 出ない (static は対象外)
    public System.Action onDeath;         // 出ない (Action はシリアライズ不可)

    // 表示順序や UI を強化する属性
    [Header("移動関連")]
    [Tooltip("プレイヤーの最大速度 (m/s)")]
    [Range(0, 20)]
    public float maxSpeed = 10f;

    [Space(10)]
    [TextArea(3, 5)]
    public string description;

    [ContextMenu("HPをリセット")]
    void ResetHP() { hp = 100; }   // Inspector 右クリックメニューに表示される
}

主なカスタム属性一覧

属性用途
[SerializeField]private なのに Inspector に出す
[Header("見出し")]セクション見出しを付ける
[Tooltip("説明")]マウスホバーで説明表示
[Range(0, 100)]スライダー表示
[Space(10)]項目間に余白
[TextArea]複数行テキストエリア
[Multiline]同上(高さ固定)
[ColorUsage]HDR カラー対応
[Min(0)]最小値クランプ
[HideInInspector]public でも非表示
[NonSerialized]シリアライズしない
[ContextMenu("...")]右クリックメニューに関数追加

Prefab の Apply / Revert

Prefab インスタンスを編集すると左に青いバー太字でオーバーライドが示されます。Inspector 右上の Overrides ボタンから:

  • Apply All — 変更を Prefab 本体に書き戻す(他のインスタンスにも反映)
  • Revert All — Prefab 本体に戻す
  • Apply / Revert(個別) — 各フィールド毎

Editor Script で Inspector を拡張

UnityEditor.Editor を継承して CustomEditor 属性を付けると、Inspector の見た目を完全に書き換えられます:

// 通常スクリプト (Scripts/PlayerStatus.cs)
public class PlayerStatus : MonoBehaviour
{
    public int hp = 100;
    public int maxHp = 100;
}

// エディタ拡張 (必ず Editor フォルダ配下に置く)
// Assets/Editor/PlayerStatusEditor.cs
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(PlayerStatus))]
public class PlayerStatusEditor : Editor
{
    public override void OnInspectorGUI()
    {
        // 既定の表示
        DrawDefaultInspector();

        var ps = (PlayerStatus)target;

        // HP バーを描画
        EditorGUILayout.LabelField("HP Bar");
        Rect r = GUILayoutUtility.GetRect(18, 18, "TextField");
        EditorGUI.ProgressBar(r, (float)ps.hp / ps.maxHp, $"{ps.hp} / {ps.maxHp}");

        // ボタン
        if (GUILayout.Button("Damage 10"))
        {
            ps.hp = Mathf.Max(0, ps.hp - 10);
            EditorUtility.SetDirty(ps);  // 変更を保存
        }
    }
}

マルチオブジェクト編集

Hierarchy で複数 GameObject を選択すると Inspector に共通プロパティが出ます。同じスクリプトをアタッチしているなら同時に値を変更できます。CustomEditor を作る場合は [CanEditMultipleObjects] を付与する必要があります。

FAQ

Q: フィールドが Inspector に出ない
A: ① public または [SerializeField] が付いているか、② static や readonly でないか、③ シリアライズ可能な型か(Dictionary はそのままでは出ない)を確認してください。

Q: Inspector の値が Play 時にリセットされる
A: Play モード中の変更はランタイムのみで、停止すると元に戻ります。Play 中に保存したい値は右クリック → Copy Component → 停止後に Paste Component Values

Q: 複数 Inspector を出したい
A: Inspector タブ右クリック → Add Tab → Inspector。または GameObject 右クリック → Properties... で独立ウィンドウ。

Q: ScriptableObject の Inspector もこれと同じ?
A: はい。ScriptableObject はアセットとしてプロジェクトに保存され、Project ウィンドウで選択すると Inspector に同じルールで表示されます。