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;
}
}
/// <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&C#&接口]通过接口调用不同类型 物体 的继承了接口的组件
- 怎么通过反射的方式获取指定变量名称的值呢?比如说一个const类型的常量:const string aa=123
- Unity中查找子组件GameObject或Component的操作汇总
- Unity中查找子组件GameObject或Component的操作汇总
- Unity根据名称递归查找一个物体的子物体
- 编写一个程序,可以通过次程序完成一个表的创建操作,输入表的名称,各个列的名称及类型,输入完成后直接通过JDBC创建指定的表。
- Unity 查找子节点物体/组件 递归方法
- 编写一个程序,可以通过次程序完成一个表的创建操作,输入表的名称,各个列的名称及类型,输入完成后直接通过JDBC创建指定的表。
- 编写一个程序,可以通过次程序完成一个表的创建操作,输入表的名称,各个列的名称及类型,输入完成后直接通过JDBC创建指定的表。
- 编写一个程序,可以通过次程序完成一个表的创建操作,输入表的名称,各个列的名称及类型,输入完成后直接通过JDBC创建指定的表。
- 在unity通过组件名称(string)添加脚本
- Unity 通过代码获取从面板传入的mono脚本,并添加为GameObject的脚本组件
- 编写一个程序,可以通过次程序完成一个表的创建操作,输入表的名称,各个列的名称及类型,输入完成后直接通过JDBC创建指定的表。
- 编写一个程序,可以通过次程序完成一个表的创建操作,输入表的名称,各个列的名称及类型,输入完成后直接通过JDBC创建指定的表。
- 编写一个程序,可以通过次程序完成一个表的创建操作,输入表的名称,各个列的名称及类型,输入完成后直接通过JDBC创建指定的表。
- 编写一个程序,可以通过次程序完成一个表的创建操作,输入表的名称,各个列的名称及类型,输入完成后直接通过JDBC创建指定的表。
- 编写一个程序,可以通过次程序完成一个表的创建操作,输入表的名称,各个列的名称及类型,输入完成后直接通过JDBC创建指定的表。
- 编写一个程序,可以通过次程序完成一个表的创建操作,输入表的名称,各个列的名称及类型,输入完成后直接通过JDBC创建指定的表。
- UE4——查找指定类型或名称的Actor对象
- 在List查找指定名称的成员的两种写法和搜索所有指定类物体的写法