반응형
아래와 같이 유니티에서는 기본적으로 유니티에서는 런타임 중에 오브젝트를 찾아주는 함수가 존재하지만, 모든 오브젝트를 반환해주지 않습니다.
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)된 오브젝트까지 검색하여 찾아줍니다.
반응형
'Utils' 카테고리의 다른 글
C#, 커스텀 밴치마크 라이브러리 (함수 테스트 도구) (2) | 2022.01.16 |
---|---|
유니티, 코루틴 최적화(Coroutine Yield Instruction) (0) | 2021.12.23 |
C#, Enum.GetMoveNext() 확장함수로 다음 값으로 넘기기 (2) | 2021.12.21 |
C#, Description 통한 Enum 관리하기 (0) | 2021.12.19 |
C#, 확장함수를 이용하여 Collection<T> First, Last 가져오기 (0) | 2021.12.19 |
댓글