Unity/Study

FindObjectOfType vs FindFirst or Any ObjectByType

chromy0430 2025. 7. 19. 17:11

유니티 6로 넘어와보니 Find 함수 중 FindObjectOfType 함수가 더이상 사용되지않는다고 한다.

그 대신에 FindFirstObjectByType 이나 FindAnyObjectByType을 사용하라고 하는데, 대체 무슨 차이가 있길래 기존에 사용하던 함수를 버리고 새로운 함수를 사용하라고 하는 것인지 궁금했다.

 

그래서 이 코드를 준비했다.

using UnityEngine;
using System.Diagnostics;

public class FindFunctionTest : MonoBehaviour
{
    private const int ITERATIONS = 10000000;
    
    void Start()
    {
        // FindObjectOfType 테스트
        Stopwatch sw1 = Stopwatch.StartNew();
        for (int i = 0; i < ITERATIONS; i++)
        {
            var abcd1 = FindObjectOfType<Class>();
        }
        sw1.Stop();
        Debug.Log($"FindObjectOfType 실행 시간 ({ITERATIONS}회): {sw1.ElapsedMilliseconds}ms");

        // FindFirstObjectByType 테스트
        Stopwatch sw2 = Stopwatch.StartNew();
        for (int i = 0; i < ITERATIONS; i++)
        {
            var abcd2 = FindFirstObjectByType<Class>();
        }
        sw2.Stop();
        Debug.Log($"FindFirstObjectByType 실행 시간 ({ITERATIONS}회): {sw2.ElapsedMilliseconds}ms");

        // FindAnyObjectByType 테스트
        Stopwatch sw3 = Stopwatch.StartNew();
        for (int i = 0; i < ITERATIONS; i++)
        {
            var abcd3 = FindAnyObjectByType<Class>();
        }
        sw3.Stop();
        Debug.Log($"FindAnyObjectByType 실행 시간 ({ITERATIONS}회): {sw3.ElapsedMilliseconds}ms");
    }

    
}

 

System.Diagnostics에 있는 Stopwatch를 통해서 실행 시간을 측정하고 출력하도록 했다.

Class 클래스는 그저 간단한 debug만 있는 스크립트이므로 재미로 봐주길 바란다.

 

위 코드를 실행시킨 결과는 아래와 같다.

 

 

FindObjectOfType 과 FindFirstObjectByType의 경우는 서로 실행시간이 비슷하지만, FindAnyObjectByType의 경우는 두 함수에 비해 3배나 빠르다.

 

물론 함수마다 각각의 역할이 있는 것 이기에, 이것만 봐서 FindAnyObjectByType 함수가 빠르니까 앞으로는 저걸 쓰면 되겠네. 라고 하면 안된다.

 

그저 재미로만 봐주길 바라는 실험이다.

'Unity > Study' 카테고리의 다른 글

바탕화면 방치형 게임 화면 방식  (1) 2025.09.09
가비지 컬렉션 GC  (1) 2025.05.04
WaitForSeconds 미리 캐싱  (0) 2025.05.01
Unity Fake Null 관련  (0) 2025.05.01