unity通过递归与委托更精确的查找子物体
一般通过递归和一个子物体名称。通过transform.Find()可以实现查找符合名称的子物体,但有可能多个子物体名字相同就可能造成查找的不是想要的,手动打又麻烦,所以在此基础上改了下,代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FindchildWithCondition
{
public delegate bool Condition(Transform tra);
private static bool haveFound;
public static FindchildWithCondition Instance { get
{
if (_instance == null)
{ _instance = new FindchildWithCondition(); }
haveFound = false;
return _instance;
} }
private static FindchildWithCondition _instance;
public Transform FindChild(Transform parent, string childName, Condition condition)
{
if(haveFound)
{ return null; }
for (int i = 0; i < parent.childCount; i++)
{
Transform child = parent.GetChild(i);
if (child.name == childName && condition(child))
{
return child;
}
}
for (int i = 0; i < parent.childCount; i++)
{
Transform child = parent.GetChild(i);
Transform target = FindChild(child, childName, condition);
if (target != null)
{
return target;
}
}
return null;
}
}
其实第二个参数可以不要,包含到委托里面也行
下面是测试图 GameObject(5)上都挂了Text组件