本文轉載自【https://blog.csdn.net/u013341672/article/details/81129641】
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腳本的遊戲物體,並且它處於激活狀態
//反正,各位按照自己的需求可以編寫出適合自己的需求的樣子
}