🍣 애니메이터 최적화 방법
[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)을 비교하며 문자의 길이 만큼 연산의 횟수가 늘어난다.
📒 참고자료
'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 |