つまり、デフォルトのInspectorに出てくるこのフィールドを作成します。
私はこれを割と便利に使っているのですが、自分でエディタ拡張をしてしまうとこれも消えてしまうのでつらい。
そこでエディタ拡張を行ったときにも、このコンポーネントスクリプトへのフィールドを作成する方法です。
環境はUnity 2017.1.0f3です。
スポンサーリンク
MonoScriptを使う
このスクリプトオブジェクトは、MonoScriptオブジェクトを出してやればよいみたいでした。
コンポーネントのオブジェクトからMonoScript.FromMonoBehaviour で取得したMonoScriptオブジェクトをフィールドに表示してやることで実現できます。
OnInspectorGUIで次のようにしてやると
public override void OnInspectorGUI () { NewBehaviourScript t = target as NewBehaviourScript; EditorGUILayout.ObjectField ("My Script", MonoScript.FromMonoBehaviour (t), typeof(MonoScript), true); }
このように表示されます。
デフォルトのInspectorのように、読み取り専用表示にしたい場合はGUI.enableを使います。
public override void OnInspectorGUI () { NewBehaviourScript t = target as NewBehaviourScript; GUI.enabled = false; EditorGUILayout.ObjectField ("My Script", MonoScript.FromMonoBehaviour (t), typeof(MonoScript), true); GUI.enabled = true; }
とすることで、次のようになります。
この項目はスクリプトファイルを指すようになっています。
自身のGameObjectへのフィールドを作成する
似たような感じで、自分のGameObjectへのフィールドも作成できます。
EditorGUILayout.ObjectField ("My Object", t, typeof(Object), true);
といった感じです。
まあGameObjectを選択しているからInspectorが表示されているわけで、あんまり意味ないっちゃそうですが…
自身のPrefabへのフィールドを作成する
そのGameObjectがPrefabから作成されているとき、元のPrefabを取得することで、フィールドを作成することができます。
EditorGUILayout.ObjectField ("My Prefab", PrefabUtility.GetPrefabParent (t), typeof(Object), true);
こうです。
このフィールドをクリックすると、Prefabを参照することができます。