コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】Hierarchy に存在するすべてのゲームオブジェクトを取得する方法

方法1

using System.Linq;
using UnityEngine;

...

var list = Resources
    .FindObjectsOfTypeAll<GameObject>()
    .Where( c => c.scene.isLoaded )
    .Where( c => c.hideFlags == HideFlags.None )
;

こちらの方法の場合、すべてのゲームオブジェクトを取得できますが、
ゲームオブジェクトの並びは順不同になります

方法2

using System.Linq;
using UnityEngine;

...

var list = GameObject
    .FindObjectsOfType<GameObject>()
    .Where( c => c.hideFlags == HideFlags.None )
    .Where( c => c.transform.parent == null )
    .SelectMany( c => c.GetComponentsInChildren<Transform>( true ) )
    .Select( c => c.gameObject )
;

こちらの方法の場合、ルートに存在するゲームオブジェクトが非アクティブの場合、
そのゲームオブジェクトと子オブジェクトは取得できないですが、
子オブジェクトの並びは Hierarchy と同じになります

参考サイト様