エディタ拡張を行っている時にあるジェネリクス型のクラスのInspectorを変更したい時がありその時の知見です。
対象のクラス
例えばベースクラスとして次のようなクラスを定義しました。
public class HogeBase<T> : MonoBehaviour
{
[SerializeField]
private T _value;
}
継承したクラスはこのような感じになります。
public class HogeChild : HogeBase<float>
{
}
Inspector
こちらの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でInspectorを編集
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)]