GameObject.FindXXX()会找不到未激活的对象,下面是通过使用 Resources.FindObjectsOfTypeAll
来获取未激活的对象的方法。
/// <summary>
/// 根据名称找到物体(可以找到未激活的物体)
/// </summary>
/// <param name="str">物体名称</param>
/// <returns></returns>
public GameObject FindGameObject(string str)
{
GameObject instance = new GameObject();
var all = Resources.FindObjectsOfTypeAll<GameObject>();
foreach (GameObject item in all)
{
if (item.gameObject.name == str)
{
instance = item;
}
}
return instance;
}
因为是通过找所有物体匹配出来,所以最好用到场景物体少的时候。
还有一个方法是设置一个激活的父物体,先找到激活的父物体,再通过Transform.Find(XXX)来找到未激活的子物体
GameObject parentObj = GameObject.Find("AAA");
GameObject bbb = parentObj.transform.Find("BBB").gameObject;
bbb.SetActive(true);