【Unity】Unity Gizmos入門:シーンビューでデバッグ情報を視覚化する強力なツール

作成: 2026-02-05

UnityのGizmosを使ってシーンビューでデバッグ情報を視覚化する方法を解説。空のGameObject、トリガー範囲、AIの検知範囲などを表示できます。

概要

動作確認環境: Unity 2022.3 LTS / Unity 6

「空のGameObjectがどこにあるのかわからない…」「トリガーの範囲がどこまでなのか確認したい…」「AIの検知範囲を視覚的に確認しながら調整したい…」

そこで役立つのが、Gizmos(ギズモ) です。Gizmosは、シーンビューでデバッグ情報を視覚化する強力なツールです。シーンビューでのみ表示され、ビルドには含まれません。

Gizmosの基本的な使い方

OnDrawGizmos:常にGizmosを描画

using UnityEngine;

public class GizmosExample : MonoBehaviour
{
    void OnDrawGizmos()
    {
        // 黄色の球体を描画
        Gizmos.color = Color.yellow;
        Gizmos.DrawSphere(transform.position, 1.0f);
    }
}

OnDrawGizmosSelected:選択時のみGizmosを描画

void OnDrawGizmosSelected()
{
    // 赤色の球体を描画
    Gizmos.color = Color.red;
    Gizmos.DrawSphere(transform.position, 1.0f);
}

両方を組み合わせる

void OnDrawGizmos()
{
    // 通常時は緑色
    Gizmos.color = Color.green;
    Gizmos.DrawSphere(transform.position, 1.0f);
}

void OnDrawGizmosSelected()
{
    // 選択時は赤色
    Gizmos.color = Color.red;
    Gizmos.DrawSphere(transform.position, 1.0f);
}

Gizmosクラスの主なメソッド

メソッド説明
Gizmos.color描画色を設定
Gizmos.DrawSphere球体を描画
Gizmos.DrawWireSphereワイヤーフレームの球体を描画
Gizmos.DrawCube立方体を描画
Gizmos.DrawWireCubeワイヤーフレームの立方体を描画
Gizmos.DrawLine2点間に線を描画
Gizmos.DrawRayレイを描画
Gizmos.DrawIconアイコンを描画
Gizmos.DrawMeshメッシュを描画
Gizmos.matrix変換行列を設定

使用例

// 球体を描画
Gizmos.color = Color.red;
Gizmos.DrawSphere(transform.position, 1.0f);

// ワイヤーフレームの立方体を描画
Gizmos.color = Color.yellow;
Gizmos.DrawWireCube(transform.position, new Vector3(2, 2, 2));

// 線を描画
Gizmos.color = Color.blue;
Gizmos.DrawLine(transform.position, transform.position + Vector3.forward * 5);

// レイを描画
Gizmos.DrawRay(transform.position, transform.forward * 5);

半透明の描画

アルファ値を持つColorを使うことで、半透明のGizmosを描画できます。

// 半透明の赤(アルファ0.3)
Gizmos.color = new Color(1f, 0f, 0f, 0.3f);
Gizmos.DrawSphere(transform.position, 2.0f);

// 輪郭は不透明で描画
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(transform.position, 2.0f);

塗りつぶしと輪郭を組み合わせることで、範囲が見やすくなります。

GizmosとDebug.Drawの使い分け

機能GizmosDebug.Draw
呼び出し場所OnDrawGizmos / OnDrawGizmosSelectedUpdate / FixedUpdate など
用途エディタでの設計・調整実行時のデバッグ
表示タイミング常時(編集中も)実行中のみ
持続時間毎フレーム描画duration指定可能

Debug.Drawの例

void Update()
{
    // 実行中にレイを描画(赤色、1秒間表示)
    Debug.DrawRay(transform.position, transform.forward * 10f, Color.red, 1f);

    // 2点間に線を描画
    Debug.DrawLine(pointA, pointB, Color.green);
}

使い分けのコツ: エディタでの範囲確認や設計時はGizmos、実行時の動作確認(レイキャストの軌跡など)はDebug.Drawを使います。

実践的な使用例

例1:空のGameObjectを視覚化

public class EmptyObjectGizmo : MonoBehaviour
{
    [SerializeField] private Color normalColor = Color.green;
    [SerializeField] private Color selectedColor = Color.red;
    [SerializeField] private float radius = 0.5f;

    void OnDrawGizmos()
    {
        Gizmos.color = normalColor;
        Gizmos.DrawSphere(transform.position, radius);
    }

    void OnDrawGizmosSelected()
    {
        Gizmos.color = selectedColor;
        Gizmos.DrawSphere(transform.position, radius);
    }
}

例2:トリガーの範囲を視覚化

public class TriggerGizmo : MonoBehaviour
{
    [SerializeField] private BoxCollider boxCollider;

    void OnDrawGizmos()
    {
        if (boxCollider == null) return;

        Gizmos.color = Color.green;
        Gizmos.matrix = transform.localToWorldMatrix;
        Gizmos.DrawWireCube(boxCollider.center, boxCollider.size);
    }
}

例3:AIの検知範囲を視覚化

public class AIDetectionGizmo : MonoBehaviour
{
    [SerializeField] private float detectionRange = 10.0f;

    void OnDrawGizmos()
    {
        Gizmos.color = Color.yellow;
        Gizmos.DrawWireSphere(transform.position, detectionRange);
    }

    void OnDrawGizmosSelected()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere(transform.position, detectionRange);
        // 前方方向を線で表示
        Gizmos.DrawRay(transform.position, transform.forward * detectionRange);
    }
}

例4:パスを視覚化

public class PathGizmo : MonoBehaviour
{
    [SerializeField] private Transform[] waypoints;

    void OnDrawGizmos()
    {
        if (waypoints == null || waypoints.Length < 2) return;

        Gizmos.color = Color.cyan;

        // ウェイポイントを球体で表示
        foreach (var waypoint in waypoints)
        {
            if (waypoint != null)
                Gizmos.DrawSphere(waypoint.position, 0.3f);
        }

        // ウェイポイント間を線で接続
        for (int i = 0; i < waypoints.Length - 1; i++)
        {
            if (waypoints[i] != null && waypoints[i + 1] != null)
                Gizmos.DrawLine(waypoints[i].position, waypoints[i + 1].position);
        }
    }
}

例5:レイキャストのデバッグ

public class RaycastGizmo : MonoBehaviour
{
    [SerializeField] private float rayDistance = 10.0f;

    void OnDrawGizmos()
    {
        // レイキャストの方向を線で表示
        Gizmos.color = Color.red;
        Gizmos.DrawRay(transform.position, transform.forward * rayDistance);

        // ヒット位置に球体を表示
        if (Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, rayDistance))
        {
            Gizmos.color = Color.green;
            Gizmos.DrawSphere(hit.point, 0.2f);
        }
    }
}

パフォーマンス注意: OnDrawGizmos内でPhysics.Raycastを実行すると、大量のオブジェクトにアタッチした場合にエディタが重くなります。デバッグ用途に限定し、本番環境ではOnDrawGizmosSelected(選択時のみ実行)を使用することを推奨します。

Gizmosの表示・非表示

シーンビューの右上にある「Gizmos」ボタンをクリックすると、Gizmosメニューが開きます。

  • 各コンポーネントごとにGizmosの表示・非表示を設定可能
  • 「3D Icons」スライダーでGizmosのサイズを調整可能
  • シーンビューとゲームビューの両方で表示可能

Game Viewでの表示

Game Viewの右上にある「Gizmos」ボタンをオンにすると、エディタ上のGame ViewでもGizmosが表示されます。これはデバッグ時に便利です。

ビルドについて: ビルドされたゲームではOnDrawGizmosは呼び出されませんが、メソッド自体はIL(中間言語)としてビルドに含まれます。実害はほぼありませんが、厳密にビルドから除外したい場合は#if UNITY_EDITORで囲みます。

#if UNITY_EDITOR
void OnDrawGizmos()
{
    Gizmos.color = Color.yellow;
    Gizmos.DrawSphere(transform.position, 1.0f);
}
#endif

結論: 通常は#if UNITY_EDITORなしでも問題ありません。パフォーマンスにも影響しません。コードの意図を明確にしたい場合や、厳密なビルドサイズ管理が必要な場合のみ使用してください。

次のステップ:Handlesクラス

より高度なシーンビュー描画には Handles クラスがあります。

機能GizmosHandles
配置場所通常スクリプトEditorフォルダ
インタラクション表示のみドラッグで値変更可能
用途デバッグ表示カスタムエディタツール

Handlesを使うと、シーンビュー上でドラッグして範囲を調整するなどのインタラクティブな操作が実装できます。Gizmosに慣れたら、次のステップとしてHandlesを学ぶことをお勧めします。

ベストプラクティス

  • OnDrawGizmosとOnDrawGizmosSelectedを使い分ける - 常に表示か選択時のみ表示かを適切に選択
  • 色を使い分ける - 通常時は緑、選択時は赤、警告は黄色など
  • SerializeFieldで設定を公開する - インスペクターで色やサイズを調整可能に
  • nullチェックを忘れずに - 参照がnullの場合のエラーを防止
  • Gizmos.matrixを活用する - 回転や拡大縮小されたオブジェクトに対応
[SerializeField] private BoxCollider boxCollider;
[SerializeField] private Color gizmoColor = Color.green;

void OnDrawGizmos()
{
    if (boxCollider == null) return;

    Gizmos.matrix = transform.localToWorldMatrix;
    Gizmos.color = gizmoColor;
    Gizmos.DrawWireCube(boxCollider.center, boxCollider.size);
}

まとめ

Gizmosは、シーンビューでデバッグ情報を視覚化する強力なツールです。

  • 空のGameObjectを視覚化 - 位置がわかりやすくなる
  • トリガーやコライダーの範囲を表示 - 当たり判定の確認が容易に
  • AIの検知範囲を表示 - パラメータ調整が視覚的にできる
  • パスやウェイポイントを表示 - 移動経路の確認が容易に
  • レイキャストのデバッグ - ヒット判定の視覚的確認

ぜひ、Gizmosを活用して、効率的にデバッグしてください。

さらに学ぶために