using System.Linq; using UnityEngine; public static class GameObjectUtils { /// <summary> /// 現在のシーン上からすべてのオブジェクトを検索して返します /// </summary> public static GameObject[] FindAllInScene() { var objects = Resources.FindObjectsOfTypeAll( typeof( GameObject ) ) as GameObject[]; return objects .Where( c => !c.hideFlags.ContainsAny( HideFlags.NotEditable, HideFlags.HideAndDontSave ) ) .ToArray(); } }
var objects = GameObjectUtils.FindAllInScene();
GameObject.Findでは非アクティブなオブジェクトは検索できないですが
Resources.FindObjectsOfTypeAllを使用する場合は
非アクティブなオブジェクトも検索して取得可能です
ただし、Resources.FindObjectsOfTypeAllをそのまま使用すると
Assetsフォルダ内のオブジェクトも検索対象になってしまうため
hideFlagsを見ることでAssetsフォルダ内のオブジェクトは検索対象外にしています