Unity

[Unity] Animator 최적화 (Animator.StringToHash())

JiHxxn 2024. 5. 29. 08:55

🍣 애니메이터 최적화 방법

[SerializeField] private Animator animator;

    private void Update()
    {
        if(Input.GetKeyDown(KeyCode.F1))
        {
            animator.SetTrigger("Enable");
        }

        if (Input.GetKeyDown(KeyCode.F2))
        {
            animator.SetTrigger("Hand");
        }

        if (Input.GetKeyDown(KeyCode.F3))
        {
            animator.SetTrigger("Idle");
        }
    }
  • 보통 애니메이터의 파라미터를 편하게 문자열값으로 직접 넣어준다.
    • 이렇게 되면 명시성도 좋고 간편하지만, 성능상으로는 매번 문자열에서 Hash로 변환하는 과정이 들어가 있어 성능상 좋지않다.
      • *문자열 값보다 숫자 값의 비교가 더 빠르다.

 

[SerializeField] private Animator animator;

private readonly int HASH_ANIMATER_ENABLE = Animator.StringToHash("Enable");
private readonly int HASH_ANIMATER_IDLE = Animator.StringToHash("Idle");
private readonly int HASH_ANIMATER_HAND = Animator.StringToHash("Hand");

private void Update()
    {
        if(Input.GetKeyDown(KeyCode.F1))
        {
            animator.SetTrigger(HASH_ANIMATER_ENABLE);
        }

        if (Input.GetKeyDown(KeyCode.F2))
        {
            animator.SetTrigger(HASH_ANIMATER_HAND);
        }

        if (Input.GetKeyDown(KeyCode.F3))
        {
            animator.SetTrigger(HASH_ANIMATER_IDLE);
        }
    }
  • 위와 같이 전역변수로 캐싱 해놓고 사용하는게 좋다
    • 문자열을 직접적으로 파라미터로 넣어주었을 땐 문자1(1)과 문자2(1)을 비교하며 문자의 길이 만큼 연산의 횟수가 늘어난다.
      • 그렇게 때문에 파라미터를 호출할 때마다 해시 테이블을 거쳐서 비교를 하게 되는데 파라미터 값을 숫자로 미리 변환 시켜준다면 호출할 때마다 변환하는 과정을 생략할 수 있다.

📒 참고자료

유니티 최적화 : parameter ID의 Hash value 캐싱

C#.26_Animator.StringToHash()

'Unity' 카테고리의 다른 글

[Unity] 만들고 싶은 기능  (0) 2024.06.15
[Unity] 하노이탑 패키지 파일  (0) 2024.06.14
[Unity] TTS(Text to Speech) 기능 코드 구현 방법  (0) 2024.05.28
[Unity] 라이트맵 관련 문서  (0) 2024.05.28
Random.insideUnitSphere  (1) 2024.03.17