コガネブログ

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

【Unity】現在のシーン上からすべてのオブジェクトを検索する

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フォルダ内のオブジェクトは検索対象外にしています

参考サイト様

全ての GameObject をリストアップ 凛(kagring)のUnity(とQt)勉強中ブログ