Develoment/Unity issue
[유니티] FindObjectsOfType으로 배열을 구할 시 순서 정렬하기
Seo_re:
2022. 1. 26. 01:04
반응형
FindObjectsOfType<T>()
- 해당 함수로 구해지는 배열 원소들은 하이어라키 배치대로 순서가 보장되지 않는다.
- 즉, 다음과 같이 보여진다.

해결 방법
- 위 문제를 해결하기위해서는 2가지 방법이 있다.
1. 인스펙터에서 직접 드래그 앤 드롭 해준다.
2. FindObjectsOfType<T>로 배열을 구한 뒤, 정렬을 한다.
- 1번과 같은 경우는 노가다가 심해진다. 따라서, 코드로 정렬을 해주는 방법을 취한다.
- 이 때, 배열의 정렬은 transform.GetSiblingIndex() 값을 비교해서 정렬을 해주면 된다.
- SiblingIndex 값은 하이어라키에 배치된 순서의 값을 반환해준다.
코드
using System;
using UnityEngine;
SomeClass[] arr = FindObjectsOfType<SomeClass>();
Array.Sort(arr, (a, b) =>
{
return a.transform.GetSiblingIndex().CompareTo(b.transform.GetSiblingIndex());
});
- 위 코드는 오름차순으로 정렬되기 때문에 내림차순으로 정렬하고 싶으면 return 라인에 a와 b의 위치를 변경하면 된다.
결과

반응형