【Unity】デバッグのためにシーン上のオブジェクトに情報を表示

2024年10月3日

ゲームオブジェクトにデバッグに有効な情報を表示することができます。
この機能はエディターで動作するため、ビルド時には表示されません。
Sceneビューには表示されますが、Gameビューには表示されません。

実行結果

MobStatusスクリプトにライフ情報(Life)が登録されている条件のサンプルです。

サンプルのコードはオブジェクト名だけを表示するものです。
キャラクタの移動に伴って、情報も移動します。

コード

このコードを必要なオブジェクトにアタッチします。
再生中でなくても動作します。
例えば、シーンウィンドウでオブジェクトを移動しても表示はついてきます。

using UnityEngine;

// Unityエディタ時のみusingする必要がある
#if UNITY_EDITOR
using UnityEditor;
#endif

public class DebugMobStatus : MonoBehaviour
{
    // Unityエディタ時のみGizmo表示を行う
#if UNITY_EDITOR

void OnDrawGizmos()
    {
        // 表示色を指定
        GUI.color = Color.black;

        // オブジェクトの位置に「オブジェクト名」をラベル表示
        Handles.Label(transform.position, $"{name}");
    }
#endif
}

このコードは、Unityゲームエンジンで使用されるスクリプトであり、オブジェクトの位置に名前を表示するためにGizmoを使用しています。

まず、Unityの名前空間からUnityEngineを使用します。次に、Unityエディタでのみ必要なUnityEditorを条件付きで使用します。つまり、Unityエディタでのみ実行されるコードブロックを定義することができます。

DebugMobStatusクラスはMonoBehaviourクラスを継承しており、Gizmoを描画するためにOnDrawGizmosメソッドを定義しています。このメソッドは、Unityエディタでシーンビューに表示されたオブジェクトに対して、特定の表示を行うことができます。

OnDrawGizmosメソッドでは、まずGUI.colorを使用して表示色を指定し、その後Handles.Labelを使用してオブジェクトの位置にオブジェクト名を表示するためにGizmoを使用します。#if UNITY_EDITORで囲まれた部分は、Unityエディタでのみコンパイルされます。

参考

C#,Unity,小技

Posted by hidepon