Animator 컴포넌트는 현재 출력되고 있는 애니메이션 State가 어떤 상태인지 알려주는 변수와 함수들을 가지고있습니다. 많이 사용되는 것들을 알아봅시다.
특정 애니메이션 상태만 판별하고 싶을 때
if(animator.GetCurrentAnimatorStateInfo(0).IsName("WantStateName"))
{
Debug.Log("WantState Name");
}
원하는 State 이름을 적으면 해당 State가 출력될 때 호출됩니다. 위에서 normalizedTime과 사용된 것 처럼 다른 기능들과 함께 사용되는 경우가 많습니다.
‘WantStateName 애니메이션이 끝났을 때’라는 조건을 만들 때 필요한 것이죠.
애니메이션의 진행 퍼센테이지
void Start()
{
animator = GetComponent<Animator>();
}
if(animator.GetCurrentAnimatorStateInfo(0).IsName("CurrentStateName") &&
animator.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1.0f)
{
Debug.Log("Current State Name 애니메이션 종료.");
}
Animator 컴포넌트의 normalizedTime 변수는 애니메이션의 퍼센테이지를 의미한다고 생각하면 됩니다. 1.0이면 100%이니 애니메이션이 끝난 것이죠.
만약에 애니메이션이 끝나기 직전에 키를 입력받아 특정 조건을 부여하고 싶다면 이렇게 활용할 수 있습니다.
if(animator.GetCurrentAnimatorStateInfo(0).IsName("CurrentStateName") &&
animator.GetCurrentAnimatorStateInfo(0).normalizedTime < 1.0f &&
animator.GetCurrentAnimatorStateInfo(0).normalizedTime >= 0.8f)
{
if(Input.GetKeyDown(KeyCode.K)
{
Debug.Log("애니메이션 진행도 80% ~ 100% 사이 구간에 키입력.");
}
}
예를 들어서 1타 공격을 한 후 공격 모션이 끝나기 직전에 2타 공격을 하고 싶을 때 활용할 수 있습니다.