Unity3D---查找某游戏物体与父子游戏物体相关详解

1.添加tag

GameObject obj = GameObject.FindWithTag("Player");

仅适用于tag场景中只有一个player tag时,若场景中有多个player tag,也只返回一个(场景中你最后创建的那个游戏物体)

注意:无论运行该函数的游戏物体处于哪个父子层级,也无论目标tag处于哪个父子层级均能正常找到(遍历所有游戏物体)

2.GameObject.FindGameObjectsWithTag

        GameObject[] objs = GameObject.FindGameObjectsWithTag("Player");
        foreach (GameObject obj in objs)
        {
            Debug.Log(obj.name);
        }

查找所有目标tag的游戏物体

3.transform.find

        Transform t = transform.Find("3");
        Debug.Log(t.name);

注意:该函数只能查找运行该函数的游戏物体下的子物体

4.GetComponentsInChildren<>()

4.1.GetComponentsInChildren<Transform>()

    public Transform[] transforms;
    private void Start()
    {
       test_4();
    }
    public void test_4()
    {
        GameObject obj = GameObject.FindWithTag("Player");
        transforms = obj.GetComponentsInChildren<Transform>();
    }

注意:其中1的tag为player,GetComponentsInChildren<Transform>()包含自身的transform

4.2GetComponentsInChildren<test>()

    public test[] transforms;
	private void Start()
	{
        test_4();
	}
    public void test_4()
    {
        GameObject obj = GameObject.FindWithTag("Player");
        transforms = obj.GetComponentsInChildren<test>();
    }

注意:1的tag为player,1与3-2与2-3没有挂载test脚本


总结:GetComponentsInChildren<>()包含自身的Component

5.遍历所有子物体(包含孙物体)

      GameObject obj = GameObject.FindWithTag("Player");
      transforms = obj.GetComponentsInChildren<Transform>();
      test_6(obj.transform);
    public void test_6(Transform transform)
    {
        foreach (Transform t in transform.GetComponentsInChildren<Transform>())
        {
            Debug.Log(t.name);
        }
    }

注意:这里包含了1这个游戏物体

6.遍历所有子物体(不包括孙物体)

    GameObject obj = GameObject.FindWithTag("Player");
    transforms = obj.GetComponentsInChildren<Transform>();
    test_7(obj.transform);
    public void test_7(Transform transform)
    {
        foreach (Transform t in transform)
        {
            Debug.Log(t.name);
        }
    }

7.正确的Destroy()销毁游戏物体的方式

 GameObject obj = GameObject.FindWithTag("Player");
 transforms = obj.GetComponentsInChildren<Transform>();
 test_8(obj.transform);
 public void test_8(Transform transform)
    {
        List<GameObject> lst = new List<GameObject>();
        foreach(Transform t in transform)
        {
            lst.Add(t.gameObject);
        }

        for (int i = 0; i < lst.Count;i++)
        {
            Destroy(lst[i]);
        }
    }

注意:某些时候也可以使用

   foreach(Transform t in transform)
        {
            Destroy(t.gameObject);
        }

8.判断一个游戏物体下是否有子物体

if(transform.childCount > 0)


猜你喜欢

转载自blog.csdn.net/amcp9/article/details/80393210
今日推荐