うにてぃブログ

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

【Unity】CustomEditor 作成時にスクリプトの参照を Inspector に表示する

base.OnInspectorGUI を呼び出さない場合は、スクリプトの参照を表示できないので
スクリプトを修正するさいに、クラス名から検索する必要があり面倒

f:id:hacchi_man:20210117015257p:plain:w300

using UnityEditor;
using UnityEngine;

public class SampleMonoBehaviour : MonoBehaviour
{
    [SerializeField]
    private int _int;
}

[CustomEditor(typeof(SampleMonoBehaviour))]
public class SampleMonoBehaviourEditor : Editor
{
    private SerializedProperty _int;

    private void OnEnable()
    {
        _int = serializedObject.FindProperty("_int");
    }

    public override void OnInspectorGUI()
    {
        EditorGUILayout.PropertyField(_int);
    }
}

スクリプトの SerializedProperty

スクリプトの SerializedProperty も取得することが可能で m_Script というフィールドで定義されているので

serializedObject.FindProperty("m_Script");

とすることで取得できる

これを利用して先程の CustomEditor を修正するとスクリプトの参照が表示されるようになる

f:id:hacchi_man:20210117015651p:plain:w300

[CustomEditor(typeof(SampleMonoBehaviour))]
public class SampleMonoBehaviourEditor : Editor
{
    private SerializedProperty _int;
    private SerializedProperty _script;

    private void OnEnable()
    {
        _script = serializedObject.FindProperty("m_Script");
        _int = serializedObject.FindProperty("_int");
    }

    public override void OnInspectorGUI()
    {
        using (new EditorGUI.DisabledScope(true))
        {
            EditorGUILayout.PropertyField(_script);
        }
        EditorGUILayout.PropertyField(_int);
    }
}