(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!

    

OdinとCustomEditorを併用する方法【Unity】【アセット】【Odin】【エディタ拡張】


このエントリーをはてなブックマークに追加



この記事でのバージョン
Unity 2018.4.0f1
Odin 2.0.20


はじめに

色々な属性を追加して、Inspectorを使いやすくしたり、


f:id:kan_kikuchi:20171127084846j:plain


シーン内を検証し、Inspectorでの設定に問題のあるオブジェクトを見つけたりも出来るOdinですが、


f:id:kan_kikuchi:20180104073302j:plain


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;

}

f:id:kan_kikuchi:20190517055444j:plain


「このクラスの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();
  }
  
}

f:id:kan_kikuchi:20190517055736j:plain


こんな時は継承するクラスを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();
  }
  
}

f:id:kan_kikuchi:20190517055819j:plain