Unityで最初から自動アタッチされてる状態にする 例


InspectorでReset選択時に自動アタッチ

InfoGetter.cs
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;

    /// <summary>
    /// お知らせ表示
    /// </summary>
    public class InfoGetter : MonoBehaviour
    {
        [Header("表示するオブジェクト")]
        [SerializeField]
        private GameObject prefab = null;
        [Header("表示させる場所の親")]
        [SerializeField]
        private Transform InstantiateParent = null;//Instantiateで複製したオブジェクトの親

        void Start()
        {
           CommonValues.Message.Reverse();
            for (int i = 0; i < CommonValues.Message.Count; i++)
            {
                GameObject item = GameObject.Instantiate(prefab, InstantiateParent);

                var text1 = item.FindChild("InfoText").GetComponent<Text>();
                text1.text = CommonValues.Message[i];

            }
        }

#if UNITY_EDITOR
        /// <summary>
        /// InspectorからReset選択時に自動アタッチ
        /// </summary>
        private void Reset()
        {
            //指定フォルダのprefabを全取得
            var guids_prefab = AssetDatabase.FindAssets("t:prefab", new string[] { "Assets/Prefabs" });

            for (int i = 0; i < guids_prefab.Length; i++)
            {
                //アタッチさせたいオブジェクト名を拡張子付きで書く
                prefab = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Prefabs/Info.prefab");

            }
            // ヒエラルキー上のすべてのオブジェクトを取得
            Object[] allGameObject = Resources.FindObjectsOfTypeAll(typeof(GameObject));
            // 取得したオブジェクトの名前を表示
            foreach (GameObject obj in allGameObject)
            {
                Debug.Log(obj.name);
                //アタッチさせたいオブジェクト名を書く
                if (obj.name == "InfoContent")
                {
                    InstantiateParent = obj.transform;

                }
            }
        }

#endif
}


これで、gitであらぶってアタッチ抜けが起きても戻せる!