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