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;
}
}