Q.StringToHash 메서드는 뭐야?
A.
Animator Class에 있는 메서드로 애니메이션의 파라미터의 이름(문자열)을 해시값으로 변경하여
최적화 및 성능 개선에 도움을 주는 메서드이다.
Q.Animator의 함수라는건 알겠어, 근데 왜 사용하는거야?
A.위에서 말했듯이 최적화 및 성능개선이라고 했다.
애니메이션의 파라미터를 코드로 사용할때
SetBool("isWalking",true);
이런식으로 문자열을 그대로 넣어서 사용하게 되면 파라미터의 문자열을 서로 비교하는 작업을 하는데
이때 처리비용이 크기 때문에 비효율적이라고 하는것이다.
하지만 StringToHash를 사용하여 문자열을 Hash값으로 변경해주면
int(정수)는 한 자리만 체크하므로 최적화에 매우 효율적이기 때문이다.
또한 문자열 -> 정수( 21억 범위)로 변홤하여 충돌(중복)이 일어날 확률이 매우 낮다!!!
문자열 -> 정수(Hash값)은 항상 동일한 해시값을 반환하기에 다른 파라미터를 건들일 일도 없다.
Q.StringToHash 단점이 있을까?
A.
정수 -> 문자열 반환에는 사용하지 못하는 단점이 있다, StringToHash는 일방향으로 작동하는 메서드이기 때문에
p.s
정수(Hash값) -> 문자열은 항상 동일한 문자열을 반환하지 않기에 충돌이 발생 할 수 있다.
Q.StringToHash는 어떡해 사용해?
public class TopDownAnimationController : AnimationController
{
//해당 객체에서 사용할 Class 위에 문자열을 해시값으로 변환한후 정적변수로 선언해놓기
private static readonly int isWalking = Animator.StringToHash("isWalking");
private static readonly int isHit = Animator.StringToHash("isHit");
private static readonly int attack = Animator.StringToHash("attack");
//필요할때 해당 변수값을 가져와서 사용하기
private void Move(Vector2 vector)
{
animator.SetBool(isWalking);
}
}
이런식으로 미리 문자열을 해시값으로 변환하여 선언한 뒤 (정적으로 생성하여 컴파일하면서 동시에 생성)
필요할때 해당 해시값 변수를 인자값으로 사용하면 된다.
'Unity' 카테고리의 다른 글
Unity :: TMP(Text Mesh Pro) 한글 폰트로 쓰기 , 스크립트에서 사용하기 (0) | 2024.10.15 |
---|---|
Unity :: 비트연산자와 레이어마스크 (0) | 2024.10.14 |
Unity :: 스크립트에서 InputSystem을 사용하기 위해 InputActionAsset을 호출시 주의할 점 (0) | 2024.10.10 |
Unity :: ScriptableObject(스크립타블오브젝트) (0) | 2024.10.09 |
Unity :: 오일러각 vs 쿼터니언 , 쿼터니언과 벡터 곱셈 (0) | 2024.10.08 |