物体的查找
GameObject.Find
通过名字或路径查找游戏对象
(1)使用
GameObject.Find("GameObject"); GameObject.Find("GameObject/ChildGameObject);
(2)注意
①无法查找隐藏对象,只要路径中存在任何一个节点是隐藏的,则查找不到该对象
②查找相当于递归遍历查找,虽使用方便但效率低下,建议在Start()函数中查找对象并保存引用,切忌在Update()中动态查找。
Transform.Find
(1)使用
transform.Find("GameObject");
(2)注意
①可以查找隐藏对象
②支持路径查找
③查找隐藏对象的前提是transform所在的根节点必须可见
GameObject.FindWithTag与GameObject.FindGameObjectsWithTag
通过标签查找物体,使用较少
Resources.FindObjectsOfTypeAll
返回指定类型的对象列表。主要用于编辑器中,eg。检测内存泄露、批量查找的功能等
(1)使用(即使root隐藏也能查找到)
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);
}