无论什么程序中 消耗内存和 性能问题很重要 gameobject寻找物体的性能太差了 所以必须要改 C#代码
/// <summary>
/// Transform帮助类
/// </summary>
public static class TransformHelper
{
/// <summary>
/// 查找指定父物体的指定名称的子物体
/// </summary>
/// <param name="transform">父物体</param>
/// <param name="childName">子物体名称</param>
/// <returns>子物体</returns>
public static GameObject FindChild(Transform transform, string childName)
{
Transform child = transform.FindChild(childName);
if (child) return child.gameObject;
GameObject go = null;
for (int i = 0; i < transform.childCount; i++)
{
child = transform.GetChild(i);
go = FindChild(child, childName);
if (go) return go;
}
return null;
}
/// <summary>
/// 查找指定父物体的指定名称的子物体的指定组件
/// </summary>
/// <typeparam name="T">组件类型</typeparam>
/// <param name="transform">父物体</param>
/// <param name="childName">子物体名称</param>
/// <returns>组件</returns>
public static T FindChild<T>(Transform transform, string childName) where T : Component
{
GameObject child = FindChild(transform, childName);
if (child) return child.GetComponent<T>();
return null;
}
/// <summary>
/// 获取指定父物体及其子物体上所有指定类型的组件
/// </summary>
/// <typeparam name="T">指定类型</typeparam>
/// <param name="transform">父物体</param>
/// <returns>组件集合</returns>
public static List<T> FindChild<T>(Transform transform) where T : Component
{
List<T> list = new List<T>();
T componet = transform.GetComponent<T>();
if (componet) list.Add(componet);
if (transform.childCount > 0)
{
for (int i = 0; i < transform.childCount; i++)
{
var temp = FindChild<T>(transform.GetChild(i));
if (temp.Count > 0) list.AddRange(temp);
}
}
return list;
}
}