상세 컨텐츠

본문 제목

유니티 애니메이션 시간(몇초인지) 구하기 - animator.GetCurrentAnimatorStateInfo(index)

유니티/기능

by MJ_119 2025. 1. 12. 01:31

본문

유니티 애니메이션 시간(몇초인지) 구하기

 

애니메이션이 몇초동안 걸리는지 구하기.

animator.GetCurrentAnimatorStateInfo(0)

  • GetCurrentAnimatorStateInfo(int layerIndex)는 Animator의 특정 레이어에서 현재 활성화된 애니메이션 상태에 대한 정보를 가져옵니다.
  • 매개변수:
    • layerIndex: 확인하려는 레이어의 인덱스입니다. 기본값은 0(기본 레이어)입니다.

 

animator.GetCurrentAnimatorStateInfo(0).length

애니메이션 재생 후 특정 작업

애니메이션 길이를 기준으로 특정 작업을 지연 실행하고 싶을 때 사용할 수 있습니다.

 

IEnumerator PerformActionAfterAnimation()
{
    AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
    float animationLength = stateInfo.length;

    Debug.Log("애니메이션 길이: " + animationLength + "초");

    // 애니메이션이 끝날 때까지 대기
    yield return new WaitForSeconds(animationLength);

    // 애니메이션이 끝난 후 작업 수행
    Debug.Log("애니메이션 완료!");
}

 

 

주의사항

  1. 현재 상태만 반환:
    • GetCurrentAnimatorStateInfo()는 현재 활성화된 애니메이션 상태의 정보를 반환합니다. 만약 상태 전환(Transition)이 진행 중이면 전환 상태의 정보는 포함되지 않습니다.
    • 전환 상태를 포함하려면 GetNextAnimatorStateInfo()를 사용해야 합니다.
  2. NormalizedTime과 조합:
    • 애니메이션 상태가 반복(loop)되는 경우 normalizedTime을 사용해 현재 애니메이션의 진행도를 판단할 수 있습니다.
    • 예를 들어, normalizedTime이 2.5라면 애니메이션이 2번 재생되고 현재 0.5만큼 진행된 상태입니다.
  3. 레이어 주의:
    • 여러 레이어가 있는 경우, 특정 레이어에서 활성화된 애니메이션 상태의 길이를 확인하려면 올바른 layerIndex를 전달해야 합니다.

 

 

활용 시나리오

  1. 애니메이션 길이에 따른 행동 예약:
    • 애니메이션 종료 시점에 이벤트를 발생시키거나 다음 상태로 전환.
  2. UI 애니메이션 동기화:
    • 애니메이션 길이에 맞춰 다른 UI 효과나 동작을 연계.
  3. 애니메이션 클립 정보 디버깅:
    • 현재 활성화된 애니메이션의 길이를 디버깅 목적으로 확인.

 

AnimatorStateInfo

AnimatorStateInfo 구조체는 애니메이션 상태에 대한 다양한 속성을 포함합니다. 주요 속성은 다음과 같습니다:

속성설명

length 현재 애니메이션 상태의 길이(초 단위).
normalizedTime 현재 애니메이션 상태의 진행도를 0.0 ~ 1.0으로 나타낸 값.
shortNameHash 애니메이션 상태의 이름 해시 값.
fullPathHash 애니메이션 상태의 전체 경로 이름 해시 값.
tagHash 애니메이션 상태의 태그 이름 해시 값.
loop 애니메이션이 반복(loop) 설정인지 여부.

 

 

 

관련글 더보기