エディタ拡張を行っている時にあるジェネリクス型のクラスのInspectorを変更したい時がありその時の知見です。
対象のクラス
例えばベースクラスとして次のようなクラスを定義しました。
public class HogeBase<T> : MonoBehaviour { [SerializeField] private T _value; }
継承したクラスはこのような感じになります。
public class HogeChild : HogeBase<float> { }
こちらのInspectorを拡張したい場合。
[CustomEditor(typeof(HogeBase<>),true)] public class HogeInspector : Editor { private SerializedProperty _scriptProperty; private SerializedProperty _valueProperty; private void OnEnable() { _scriptProperty = serializedObject.FindProperty("m_Script"); _valueProperty = serializedObject.FindProperty("_value"); } public override void OnInspectorGUI() { using (new EditorGUI.DisabledScope(true)) { EditorGUILayout.PropertyField(_scriptProperty); } EditorGUILayout.PropertyField(_valueProperty, new GUIContent("値 ")); serializedObject.ApplyModifiedProperties(); } }
CustomEditor
ジェネリクスを指定する場合には次のように指定します。 また継承先のクラスのCustomEditorの対象にするためには、第2引数をtrueにしてあげます。
[CustomEditor(typeof(HogeBase<>),true)]
複数のジェネリクスを格納する場合
次のように2つのジェネリクスの型があった場合
public class HogeBase<T,TValue> : MonoBehaviour { [SerializeField] private T _value; [SerializeField] private TValue _value2; }
カンマを使って指定ができます。
[CustomEditor(typeof(HogeBase<,>),true)]