MRが楽しい

MRやVRについて学習したことを書き残す

UnityのInspectorに説明のためのテキストメッセージを表示する

本日は Unity の小ネタ枠です。
UnityのInspectorに説明のためのテキストメッセージを表示する方法を記事にします。

EditorGUILayout.LabelField と EditorGUILayout.HelpBox

Inspector に説明のためのテキストメッセージを表示するには EditorGUILayout.LabelField または EditorGUILayout.HelpBox が利用できます。
docs.unity3d.com
docs.unity3d.com

サンプルスクリプト

以下のサンプルスクリプトを作成しました。
コンポーネントを追加すると Inspector に以下のようなラベルとヘルプボックスが表示されます。

・HelpBoxTest.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class HelpBoxTest : MonoBehaviour
{
    void Start()
    {
    }
}

・HelpBoxTestEditor.cs(Editor拡張)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(HelpBoxTest))]
public class HelpBoxTestEditor : Editor
{
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        EditorGUILayout.LabelField("ラベルフィールド");
        EditorGUILayout.HelpBox("ヘルプボックス:情報", MessageType.Info);
        EditorGUILayout.HelpBox("ヘルプボックス:警告", MessageType.Warning);
        EditorGUILayout.HelpBox("ヘルプボックス:エラー", MessageType.Error);
        EditorGUILayout.HelpBox("ヘルプボックス:None", MessageType.None);
    }
}

警告やエラーの活用方法

以下の特定条件で Inspector の情報を切り替える手法を利用して、特定の設定の時のみ警告文やエラー分を出すといったことが可能です。
bluebirdofoz.hatenablog.com

・HelpBoxChangeTest.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class HelpBoxChangeTest : MonoBehaviour
{
    [SerializeField]
    private bool p_UseSetColor = false;
    public bool UseSetColor => p_UseSetColor;

    [HideInInspector]
    public Color ObjectColor = Color.white;

    void Start()
    {
        if (p_UseSetColor)
        {
            this.GetComponent<Renderer>().sharedMaterial.SetColor("_Color", ObjectColor);
        }
    }
}

・HelpBoxChangeTestEditor.cs(Editor拡張)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(HelpBoxChangeTest))]
public class HelpBoxChangeTestEditor : Editor
{
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        HelpBoxChangeTest instance = target as HelpBoxChangeTest;

        // UseSetColor が True のときのみ、警告文と[ObjectColor]のフィールド変数を表示する
        if (instance.UseSetColor)
        {
            EditorGUILayout.HelpBox("UnityEditor再生時にアセット内のマテリアル情報が変更されます", MessageType.Warning);
            instance.ObjectColor = EditorGUILayout.ColorField("ObjectColor", instance.ObjectColor);
        }
    }
}