Unity查找物體下面某個子物體,添加腳本,添加父物體小功能(自己備份的)

	public class UnityHelper : MonoBehaviour {
        
        /// <summary>
        /// 查找子節點對象
        /// 內部使用“遞歸算法”
        /// </summary>
        /// <param name="goParent">父對象</param>
        /// <param name="chiildName">查找的子對象名稱</param>
        /// <returns></returns>
	    public static Transform FindTheChildNode(GameObject goParent,string chiildName)
        {
            Transform searchTrans = null;                   //查找結果

            searchTrans=goParent.transform.Find(chiildName);
            if (searchTrans==null)
            {
                foreach (Transform trans in goParent.transform)
                {
                    searchTrans=FindTheChildNode(trans.gameObject, chiildName);
                    if (searchTrans!=null)
                    {
                        return searchTrans;

                    }
                }            
            }
            return searchTrans;
        }

        /// <summary>
        /// 獲取子節點(對象)腳本
        /// </summary>
        /// <typeparam name="T">泛型</typeparam>
        /// <param name="goParent">父對象</param>
        /// <param name="childName">子對象名稱</param>
        /// <returns></returns>
	    public static T GetTheChildNodeComponetScripts<T>(GameObject goParent,string childName) where T:Component
        {
            Transform searchTranformNode = null;            //查找特定子節點

            searchTranformNode = FindTheChildNode(goParent, childName);
            if (searchTranformNode != null)
            {
                return searchTranformNode.gameObject.GetComponent<T>();
            }
            else
            {
                return null;
            }
        }

        /// <summary>
        /// 給子節點添加腳本
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="goParent">父對象</param>
        /// <param name="childName">子對象名稱</param>
        /// <returns></returns>
	    public static T AddChildNodeCompnent<T>(GameObject goParent,string childName) where T:Component
        {
            Transform searchTranform = null;                //查找特定節點結果

            //查找特定子節點
            searchTranform = FindTheChildNode(goParent, childName);
            //如果查找成功,則考慮如果已經有相同的腳本了,則先刪除,否則直接添加。
            if (searchTranform!=null)
            {
                //如果已經有相同的腳本了,則先刪除
                T[] componentScriptsArray=searchTranform.GetComponents<T>();
                for (int i = 0; i < componentScriptsArray.Length; i++)
                {
                    if (componentScriptsArray[i]!=null)
                    {
                        Destroy(componentScriptsArray[i]);
                    }
                }
                return searchTranform.gameObject.AddComponent<T>();
            }
            else
            {
                return null;
            }
            //如果查找不成功,返回Null.
        }

        /// <summary>
        /// 給子節點添加父對象
        /// </summary>
        /// <param name="parents">父對象的方位</param>
        /// <param name="child">子對象的方法</param>
	    public static void AddChildNodeToParentNode(Transform parents, Transform child)
	    {
            child.SetParent(parents,false);
	        child.localPosition = Vector3.zero;
	        child.localScale = Vector3.one;
	        child.localEulerAngles = Vector3.zero;
	    }
	}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章