うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】継承先のクラスでも CustomEditor を適応する

BaseClass の CustomEditor を作成して、それを ChildClass にも反映させる場合
いつもどおりの記述では ChildClass 側に反映することができない

using UnityEngine;
 
public class BaseClass : MonoBehaviour
{
}
 
[UnityEditor.CustomEditor(typeof(BaseClass))]
public class BaseClassEditor : UnityEditor.Editor
{
    public override void OnInspectorGUI()
    {
        UnityEditor.EditorGUILayout.LabelField("This is Base Class");
        base.OnInspectorGUI();
    }
}
public class ChildClass : BaseClass
{
}

f:id:hacchi_man:20201210003348p:plain

調べてみると CustomEditor ではもう一つ引数をとることができ
継承先のクラスでも 有効にする場合は これを true にする必要があった

public CustomEditor(System.Type inspectedType, bool editorForChildClasses)

ということで、下記のように CustomEditor を書き換えると、両方に表示させることができた

[UnityEditor.CustomEditor(typeof(BaseClass, true))]
public class BaseClassEditor : UnityEditor.Editor
{
    public override void OnInspectorGUI()
    {
        UnityEditor.EditorGUILayout.LabelField("This is Base Class");
        base.OnInspectorGUI();
    }
}

f:id:hacchi_man:20201210003913p:plain