Unity中关于查找物体的一系列验证

    xiaoxiao2021-11-29  26

    关于XXX.Find的一系列验证

    也看过很多技术博客里验证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; }

    就到这里吧······

    转载请注明原文地址: https://ju.6miu.com/read-678751.html

    最新回复(0)