本日は 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); } } }