기본 패턴
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.StringToHash | Animator 파라미터 이름 해시 |
Shader.PropertyToID | 셰이더 속성 이름 해시 |
| 프레임 반복 호출 | 캐싱 이점이 커지는 구간 |
| 상수화 | 문자열 오타를 줄이기 쉬움 |
| 정수 버전 API | 내부 처리 경로가 더 직접적 |
주의할 점
해시 ID를 쓴다고 모든 성능 문제가 해결되지는 않습니다. 반복 호출이 거의 없는 코드라면 가독성이 더 중요한 경우도 있습니다.
참고 링크
3 sources