[유니티] FindObjectsByType vs FindObjectsOfType

jh Seo·2024년 12월 12일
0

유니티

목록 보기
53/56

개요

어떤 컴퍼넌트가 attach되어 있는 게임 오브젝트들을 찾아오는 함수가 두개 존재한다.

FindObjectsByType 

FindObjectsOfType

이다.

FindObjectsByType

public static T[] FindObjectsByType(FindObjectsSortMode sortMode);
public static T[] FindObjectsByType(FindObjectsInactive findObjectsInactive, FindObjectsSortMode sortMode);

첫번째 인자로는 active 상태가 아닌 게임오브젝트도 받아올 건지 말지에 대한 세팅값이다.
두번째 인자는 sort모드인데 받아온 오브젝트들을 정렬을 할건지와 어떻게 정렬할건지를
FindObjectsSortMode를 통해 설정해준다.

  • FindObjectsSortMode.None을 사용하면 정렬을 하지않으므로 속도가 빨라진다.

FindObjectsOfType

public static T[] FindObjectsOfType();
public static T[] FindObjectsOfType(bool includeInactive);

인자로는 active 상태가 아닌 게임오브젝트도 받아올 건지 말지에 대한 세팅값이다.
그냥

FindObjectsOfType();

이렇게 호출 시, active되지 않은 오브젝트들은 무시한다.

  • 이 함수는 기본적으로 정렬을 한 상태로 반환하므로 느리다.
    공식문서에도 Obsolet Method라고 써있다.

공통점

This doesn't return Assets (for example meshes, textures, or prefabs). It also doesn't return objects that have HideFlags.DontSave set

이 두 함수 다 씬에 있는 오브젝트만 찾아오고 Asset들은 찾아오지 않는다.
또한 HideFlags.DontSave로 설정된 오브젝트들도 반환하지 않는다.

결론

유니티 공식문서에서도 써있듯이 FindObjectsByType 함수를 쓰라고한다.

This function is obsolete, use Object.FindObjectsByType instead.
This replacement allows you to specify whether to sort the resulting array.
FindObjectsOfType() always sorts by InstanceID, so calling FindObjectsByType(FindObjectsSortMode.InstanceID) produces identical results.

FindObjectsByType에 정렬여부까지 다 존재하므로
사실 FindObjectsByType함수를 사용할 필요가 없어보인다.

레퍼런스

FindObjectsOfType - 유니티 문서

FindObjectsByType - 유니티 문서

profile
코딩 창고!

0개의 댓글