Posted in: Unity, 메서드 & 팁 정리

AnimatorStateInfo | 애니메이션 상태 체크

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타 공격을 하고 싶을 때 활용할 수 있습니다.


스크립팅 API: AnimatorStateInfo

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다