物体(包含禁用 + 隐藏)"/>
Unity 之 搜索Hierarchy上所有的物体(包含禁用 + 隐藏)
本文转载自【】
private List<GameObject> GetAllSceneObjectsWithInactive()
{
var allTransforms = Resources.FindObjectsOfTypeAll(typeof(Transform));
var previousSelection = Selection.objects;
Selection.objects = allTransforms.Cast<Transform>()
. Where(x => x != null)
.Select(x => x.gameObject)
//如果你只想获取所有在Hierarchy中被禁用的物体,反注释下面代码
//.Where(x => x != null && !x.activeInHierarchy)
.Cast<UnityEngine.Object>().ToArray();
var selectedTransforms = Selection.GetTransforms(SelectionMode.Editable | SelectionMode.ExcludePrefab);
Selection.objects = previousSelection;
return selectedTransforms.Select(tr => tr.gameObject).ToList();
}
以上是来自【钱王拳王】的博客
以下是我对这段代码的改造!!!
在类中创建出一个List<GameObject>去存储所有获取到的游戏物体
List<GameObject> lists = new List<GameObject>();
写一个随时清空集合内元素的方法
void ClearList()
{
lists.Clear();
}
最后,原代码被改成这样
private void GetAllSceneObjectsWithInactive()
{
ClearList();
var allTransforms = Resources.FindObjectsOfTypeAll(typeof(Transform));
var previousSelection = Selection.objects;
Selection.objects = allTransforms.Cast<Transform>()
. Where(x => x != null)
.Select(x => x.gameObject)
//如果你只想获取所有在Hierarchy中被禁用的物体,反注释下面代码
//.Where(x => x != null && !x.activeInHierarchy)
.Cast<UnityEngine.Object>().ToArray();
var selectedTransforms = Selection.GetTransforms(SelectionMode.Editable | SelectionMode.ExcludePrefab);
Selection.objects = previousSelection;
lists = selectedTransforms.Select(tr => tr.gameObject).ToList();
foreach (GameObject item in lists)
{
if (item.GetComponent<Groups>() && item.GetComponent<Groups>().isActiveAndEnabled)
{
print(item.name);
}
}
//foreach内的代码按照自己想达到的需求进行编写
//我写成这样当时是为了完成一个“俄罗斯方块”的一个游戏,想找到有Groups脚本的游戏物体,并且它处于激活状态
//反正,各位按照自己的需求可以编写出适合自己的需求的样子
}
更多推荐
Unity 之 搜索Hierarchy上所有的物体(包含禁用 + 隐藏)
发布评论