해당 애니메이터를 이용하여 설명

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);
	}

}

이런식으로 미리 문자열을 해시값으로 변환하여 선언한 뒤 (정적으로 생성하여 컴파일하면서 동시에 생성)

필요할때 해당 해시값 변수를 인자값으로 사용하면 된다.

+ Recent posts