본문 바로가기

진리는어디에

[Unity] Animator 사용하여 애니메이션 종료까지 기다리기

애니메이션이 플레이 중인지 종료가 되었는지는 다음과 같은 체크 코드를 사용하면 간단하게 알아 볼수 있다.

animator.GetCurrentAnimatorStateInfo(0).IsName("YourAnimationName")

"YourAnimationName" : 메카님 스테이트의 이름(Animator 윈도우를 보면 여러 상태가 있는데 체크하고 싶은 애니메이션이 플레이되는 상태의 이름을 적어주면 된다).

IEnumerator WaitForAnimation(Animator animator)
{
    while (true == animator.GetCurrentAnimatorStateInfo(0).IsName("<UserAnimationStateName>"))
    {
yield return new WaitForEndOfFrame();
}
GameObject.Destroy (animator.gameObject);
}

위 함수를 작성하고 StartCoroutine() 함수를 이용해 호출 해주면 애니메이션 재생이 끝나면 해당 오브젝트가 삭제 된다.

출처 : http://answers.unity3d.com/questions/362629/how-can-i-check-if-an-animation-is-being-played-or.html

위의 방식이 정상 동작하지 않았다. 그래서 아래와 같이 IsInTransition함수를 이용하여 애니메이션 종료 여부를 알아 내도록 한다.

IEnumerator WaitForAnimation(Animator animator)
{
    //while (true == animator.GetCurrentAnimatorStateInfo(0).IsName(name)) {
    while(false == animator.IsInTransition(0)) {
        yield return new WaitForEndOfFrame();
    }
    GameObject.Destroy (animator.gameObject);
}

단 위와 같은 방법을 사용하기 위해서는 메카님에서 상태 변화(Transition)를 시켜 줘야한다.

유익한 글이었다면 공감(❤) 버튼 꾹!! 추가 문의 사항은 댓글로!!