본문 바로가기
Utils

유니티, 런타임 중 특정 오브젝트 모두 찾기

by Client. DJ 2021. 12. 19.
반응형

아래와 같이 유니티에서는 기본적으로 유니티에서는 런타임 중에 오브젝트를 찾아주는 함수가 존재하지만, 모든 오브젝트를 반환해주지 않습니다.

FindObjectsOfTypeAll(typeof(GameObject));

반환을 안 해주는 오브젝트로는 비활성화된 오브젝트는 반환해주지 않습니다.

 

아래의 함수는 함수를 사용하면 런타임 중 로드된 씬들의 모든 오브젝트를 반환 반을 수 있습니다.

public static List<T> FindAllObjects<T>() where T : UnityEngine.Object
{
	List<T> objects = new List<T>();
	for (int i = 0; i < UnityEngine.SceneManagement.SceneManager.sceneCount; i++)
	{
		var scene = UnityEngine.SceneManagement.SceneManager.GetSceneAt(i);
		if (scene.isLoaded)
		{
			var rootObject = scene.GetRootGameObjects();
			for (int j = 0; j < rootObject.Length; j++)
			{
				var go = rootObject[j];
				objects.AddRange(go.GetComponentsInChildren<T>(true));
			}
		}
	}
	return objects;
}

과정

1. 모든 씬에서

2. 루트 오브젝트들의

3. GetCompoenetesInChildren(true)을 통해 비활성화(Disable)된 오브젝트까지 검색하여 찾아줍니다.

반응형

댓글