この記事でのバージョン
Unity 2018.4.0f1
Odin 2.0.20
はじめに
色々な属性を追加して、Inspectorを使いやすくしたり、
シーン内を検証し、Inspectorでの設定に問題のあるオブジェクトを見つけたりも出来るOdinですが、
CustomEditorと併用する際にちょっとした注意点があったの記事にしました。
先にその注意点を簡潔に言ってしまうと
「OdinとCustomEditorを併用する場合、EditorではなくOdinEditorを使う」という話です。
Odin - Inspector and Serializer - Asset Store |
OdinとCustomEditorを併用する方法
例えば以下のようにOdinの属性を使った変数を持ったクラスがあるとします。
using Sirenix.OdinInspector;//BoxGroupなどのOdinの属性を使うのに必要 using UnityEngine; public class NewBehaviourScript : MonoBehaviour { //Odinの属性、BoxGroupでグループ化して表示し、ReadOnlyで編集出来ないように [SerializeField, BoxGroup("ぐるーぷ"), ReadOnly] private int _a = 0, _b = 1, _c = 2; }
「このクラスのInspector表示をさらに拡張したい」みたいな事はよくありますが、
通常通り、CustomEditorとEditorを使って以下のように拡張してしまうと、
なんとOdinの属性による変化は無効になってしまいます。
using UnityEditor; [CustomEditor(typeof(NewBehaviourScript))] public class NewBehaviourScriptEditor : Editor{ /// <summary> /// Inspectorの表示設定 /// </summary> public override void OnInspectorGUI() { //ヘルプを表示 EditorGUILayout.HelpBox("へるぷ", MessageType.Info); //通常のGUIを表示(Odinの属性は適応されない) base.OnInspectorGUI(); } }
こんな時は継承するクラスをEditorではなく、OdinEditorにします。
すると、Odinの属性も適応された状態でさらにInspcetorの表示を拡張出来るようになります。
using Sirenix.OdinInspector.Editor; //OdinEditorを使うのに必要 using UnityEditor; [CustomEditor(typeof(NewBehaviourScript))] public class NewBehaviourScriptEditor : OdinEditor{//EditorではなくOdinEditorを継承すればOdinの属性が使える /// <summary> /// Inspectorの表示設定 /// </summary> public override void OnInspectorGUI() { //ヘルプを表示 EditorGUILayout.HelpBox("へるぷ", MessageType.Info); //通常のGUIを表示(Odinの属性が適応される) base.OnInspectorGUI(); } }