也看过很多技术博客里验证GameObject.Find/.FindWithTag/…是否可以找到场景里active为false的游戏物体。 真正用的时候早忘了,所以还是自己来亲自验证下总结下,毕竟自己做过了就长记性了。废话不多说下面上代码:
GameObject cube = GameObject.Find("Cube"); Debug.Log(cube.name);经过实验证实:结果为GameObject.Find() 并不能查找到active为false的游戏物体。
Transform cube = transform.Find("Cube");事实证明:transform.Find()可以找到隐藏的物体,但是transform.Find()的限制是这个方法只能查找到此transform的子物体。
GameObject cube = GameObject.FindGameObjectWithTag("Player");false
GameObject cube = GameObject.FindObjectOfType(typeof(GameObject)) as GameObject;false
GameObject cube = GameObject.FindWithTag("Player");false
Transform cube = transform.FindChild("Cube");true
GameObject cube = Transform.FindObjectOfType(typeof(GameObject)) as GameObject;false
差不多就介绍完了,这是常用的所有find查找方法。 总结:transform.Find()和transform.FindChild()方法是可以查找到隐藏的游戏物体的,但是也只限于是其transform的子物体才可以。
另外分享一个递归快速查找子物体的方法:
/// <summary> /// 递归查找 /// </summary> /// <param name="root"></param> /// <param name="gname"></param> /// <returns></returns> public static GameObject FindChildByName(GameObject root, string gname) { if (root.name == gname) return root; for (int i = root.transform.childCount - 1; i >= 0; i--) { GameObject go = FindChildByName(root.transform.GetChild(i).gameObject, gname); if (go != null) return go; } return null; }就到这里吧······