您的位置:首页 > 移动开发 > Unity3D

unity 不通过gameobject寻找物体 查找指定父物体的指定名称的子物体,指定组件,指定类型的组件

2016-11-17 11:28 573 查看
无论什么程序中  消耗内存和 性能问题很重要  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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity
相关文章推荐