Unity코드 아키텍처와 품질

StringToHash와 PropertyToID

Animator, Material, Shader 속성 접근에서 문자열 대신 해시 ID를 캐싱해 쓰는 Unity 기본 패턴입니다.

마지막 수정 2026년 3월 19일

기본 패턴

csharp
private static readonly int SpeedId = Animator.StringToHash("Speed");
private static readonly int ColorId = Shader.PropertyToID("_BaseColor");

설명

  • Unity 공식 성능 가이드는 Animator와 Shader 속성 접근 시 문자열보다 정수 ID를 써서 비용을 줄이라고 권장합니다.
  • 문자열 버전 메서드는 내부에서 해싱한 뒤 정수 버전으로 전달하므로, 반복 호출되는 코드에서는 미리 해시를 만들어 두는 편이 낫습니다.
  • 애니메이션 파라미터와 셰이더 속성처럼 프레임마다 접근되는 값에서 특히 자주 쓰입니다.
  • 성능뿐 아니라 오타를 상수 한곳으로 모을 수 있다는 유지보수 장점도 있습니다.

짧은 예제

csharp
private static readonly int JumpId = Animator.StringToHash("Jump");

[SerializeField] private Animator animator;

private void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        animator.SetTrigger(JumpId);
    }
}

빠른 정리

항목설명
Animator.StringToHashAnimator 파라미터 이름 해시
Shader.PropertyToID셰이더 속성 이름 해시
프레임 반복 호출캐싱 이점이 커지는 구간
상수화문자열 오타를 줄이기 쉬움
정수 버전 API내부 처리 경로가 더 직접적

주의할 점

해시 ID를 쓴다고 모든 성능 문제가 해결되지는 않습니다. 반복 호출이 거의 없는 코드라면 가독성이 더 중요한 경우도 있습니다.

참고 링크

3 sources