Unity3D查找游戏对象的方法分为三类:GameObject查找、transform查找、Resources查找
一、GameObject查找
(1)GameObject.Find
参数为名字或者路径(也可以理解为绝对路径和相对路径)
绝对路径以“/”开头,例如
GameObject.find("/a/b")
使用规范
1、无法查找隐藏对象(active=false)
2、递归遍历查找,效率低,应该将查询写在start中保存应用,不应该写在update中查找
(2)GameObject.FindWithTag
(3)GameObject.FindGameObjectsWithTag
二、Transform
支持隐藏对象查找;支持路径查找;查找隐藏对象的前提是(transform所在的根节点必须可见,即active=true)
GameObject root = GameObject.Find("root");
root.SetActive(false); // 根节点为空
// 总是查找失败
root.transform.Find("root/AnyChildObjectName");
三、Resources.FindObjectsOfTypeAll
GameObject[] pAllObjects = (GameObject[])Resources.FindObjectsOfTypeAll(typeof(GameObject));
foreach (GameObject pObject in pAllObjects)
{
if (pObject.transform.parent != null)
{
continue;
}
if (pObject.hideFlags == HideFlags.NotEditable || pObject.hideFlags == HideFlags.HideAndDontSave)
{
continue;
}
if (Application.isEditor)
{
string sAssetPath = AssetDatabase.GetAssetPath(pObject.transform.root.gameObject);
if (!string.IsNullOrEmpty(sAssetPath))
{
continue;
}
}
Debug.Log(pObject.name);
}