유니티 메카님 Has Exit time 트렌지션 ( Unity Animation Exit time Transition interrupt )

 

유니티의 메카님 애니메이션을 사용할 때,

 

 

위와같이 AnyState에 모든 동작을 Trigger로 연결한 트리구성을 했을 경우, 

다시 Idle 애니메이션으로 돌아가게 하기위해 보통 Has Exit time을 사용한다.

 

하지만 Has Exit time이 체크된 애니메이션의 경우 재생 중간에 AnyState로도 Transition이 불가능한 한계가 있다.

Has Exit Time이 체크하지않을경우 애니메이션이 끝나는 시점에 다시 Idle 애니메이션으로 돌아갈 수가 없다.

 

그래서 사용한 방법은 애니메이션 이벤트에서 트렌지션 중이 아닐 경우 Stop을 호출하는 애니메이션 이벤트를

애니메이션 끝나기 0.1초 지점에 호출하는 것.

 

트렌지션 중을 예외처리한건 트렌지션 중에 Stop이 호출되면

다음에 이어질 예정이었던 애니메이션도 스킵되버리기 때문.

 

private void CallStopTrigger()
{
    // 트랜지션 중이 아니라면
    if(_Animator.IsInTransition(0) == false)
        _Animator.SetTrigger("Stop");
}

 

또한 Interruption Source 항목을 전부 Next State Then Current State로 설정해두면 트렌지션 중에도 간섭이 더 우선된다.

 

A -> B -> C 로 트렌지션이 되있는 상태에서A -> B 로 트렌지션이 진행중이었는데

B -> C 조건이 만족되면 A -> B의 트렌지션이 무시되고 B -> C가 바로 진행된다는 의미.

 

Current : A -> B' / A -> B'' / A -> D 와 같이 출발지에 해당되는 State에서 시작되는 Transition 간섭이 허용된다. 

Next : B -> C / B -> C' / B -> C''  와 같이 목적지에 해당되는 State에서 시작되는 Transition간섭이 허용된다.

Current Then Next : 둘다 허용되지만 Current가 우선순위가 높다.

Next Then Current : 둘다 허용되지만 Next가 우선순위가 높다.

 

 

 

#. 아래와 같이 사용하는 isName의 경우 A->B로 Transition 중인 경우에는 A가 반환된다.

_Animator.GetCurrentAnimatorStateInfo(0).IsName("Teleport")

 

 

 

 

댓글

Designed by JB FACTORY