해당 경고는 Unity에서 기존 API가 폐기(deprecated) 되었기 때문에 발생하는 정상적인 안내 메시지입니다. 오류는 아니지만, 앞으로의 호환성과 성능을 위해 수정하는 것이 권장됩니다.
원인 설명
Object.FindObjectsOfType<T>() 는 결과를 InstanceID 기준으로 자동 정렬하는데, 이 과정이 불필요하게 느려서 Unity 최신 버전에서 사용 중단되었습니다.
그래서 Unity에서는 더 명확하게 정렬 여부를 선택할 수 있는 Object.FindObjectsByType<T>() 사용을 권장합니다.
기존 코드 (경고 발생)
var objects = Object.FindObjectsOfType<MyComponent>();
권장 코드 (경고 해결)
정렬이 필요 없는 경우 (대부분 이걸 사용)
var objects = Object.FindObjectsByType<MyComponent>(FindObjectsSortMode.None);
가장 빠르고 권장되는 방식
InstanceID 기준 정렬이 필요한 경우
var objects = Object.FindObjectsByType<MyComponent>(FindObjectsSortMode.InstanceID);
왜 바뀌었나?
- 불필요한 정렬로 인한 성능 저하
- 개발자가 정렬 여부를 직접 선택하도록 개선
- 대규모 씬 / 에디터 스크립트에서 성능 차이 큼
정리
- ❌
FindObjectsOfType<T>() → 더 이상 권장되지 않음
- ✅
FindObjectsByType<T>(FindObjectsSortMode.None) 사용
- 경고는 무시해도 빌드는 되지만, 미래 버전 대비 수정 필수
에디터 스크립트에서 사용하는 경우라면 OnEnable / 메뉴 명령 / 버튼 클릭 시점에만 호출하는 것도 성능상 좋습니다.