[Unityエディター拡張] コンポーネントのスクリプトファイルへのフィールドを作成する

ヨメレバCSS
オリジナルCSS

 つまり、デフォルトのInspectorに出てくるこのフィールドを作成します。

 私はこれを割と便利に使っているのですが、自分でエディタ拡張をしてしまうとこれも消えてしまうのでつらい。

 そこでエディタ拡張を行ったときにも、このコンポーネントスクリプトへのフィールドを作成する方法です。

 環境はUnity 2017.1.0f3です。

スポンサーリンク
GoogleAdSence レクタングル(大)

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を参照することができます。

参考:インスタンスから元のPrefabを取得する【Unity】

スポンサーリンク
GoogleAdSence レクタングル(大)

シェアする

スポンサーリンク
GoogleAdSence レクタングル(大)