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로 변환하는 과정이 들어가 있어 성능상 좋지않다.
- *문자열 값보다 숫자 값의 비교가 더 빠르다.
- 이렇게 되면 명시성도 좋고 간편하지만, 성능상으로는 매번 문자열에서 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)을 비교하며 문자의 길이 만큼 연산의 횟수가 늘어난다.
- 그렇게 때문에 파라미터를 호출할 때마다 해시 테이블을 거쳐서 비교를 하게 되는데 파라미터 값을 숫자로 미리 변환 시켜준다면 호출할 때마다 변환하는 과정을 생략할 수 있다.
- 문자열을 직접적으로 파라미터로 넣어주었을 땐 문자1(1)과 문자2(1)을 비교하며 문자의 길이 만큼 연산의 횟수가 늘어난다.