Unity3D通过FindGameObjectsWithTag获取集合排序

时间:2024-03-23 12:58:27

平时获取一系列的image都是通过Inspector面板拖拽或通过transform.find()来得到相关对象的<少用GameObject.find(),好像是效率没这么高>。心血来潮,想起之前Unity文档里面还有一种获得GameObject的方法:FindGameObjectWithTag和FindGameObjectsWithTag。由于是需要得到一个相关GameObject的集合,所以使用了FindGameObjectsWithTag。很天真的认为,得到的集合的顺序就是Hierarchy面板中的顺序。结果打脸了!

Unity3D通过FindGameObjectsWithTag获取集合排序Unity3D通过FindGameObjectsWithTag获取集合排序Unity3D通过FindGameObjectsWithTag获取集合排序

得到的结果如下:

Unity3D通过FindGameObjectsWithTag获取集合排序Unity3D通过FindGameObjectsWithTag获取集合排序

说明:这里用的Unity 2017.4.2f2 版本测试的,得到的是倒序。之前在项目中得到的是乱七八糟的顺序,也不知道是不是Unity官方已经对这个方法的返回值根据一定的规则进行了排序。

当通过FindGameObjectsWithTag来找相关物体,得到的集合顺序是随机的,并不是按照Hierarchy面板中的顺序。当我们需要对其进行排序时,可以借助GetSiblingIndex()来实现。

using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
public class TestArray : MonoBehaviour {
        GameObject[] Imgs;
        void Start () {
            Imgs =GameObject.FindGameObjectsWithTag("IMG").OrderBy(g => g.transform.GetSiblingIndex()).ToArray();
            foreach (var item in Imgs)
            {
                 Debug.Log(item.name);
            }
        }
}

结果如下:

Unity3D通过FindGameObjectsWithTag获取集合排序Unity3D通过FindGameObjectsWithTag获取集合排序Unity3D通过FindGameObjectsWithTag获取集合排序