Assets/Editor/Transform.cs : warning CS0618: 'Object.FindObjectsOfType<T>()' is obsolete: 'Object.FindObjectsOfType has been deprecated. Use Object.FindObjectsByType instead which lets you decide whether you need the results sorted or not.  FindObjectsOfType sorts the results by InstanceID but if you do not need this using FindObjectSortMode.None is considerably faster.'

1 답변

0 투표

해당 경고는 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 / 메뉴 명령 / 버튼 클릭 시점에만 호출하는 것도 성능상 좋습니다.

add
...