본문 바로가기

-----Unity 3d----/Tips

animator에서 각 애니메이션들의 상태 확인하기

  들어가며...

 

기존의 FPS 게임과는 달리 현재 개발 중인 게임은 캐릭터가 시간, 게임 진행 상황에 따라 알아서 이동을 하게 된다. 그리하여 때에 맞는 애니메이션이 자동으로 실행되도록 해야하는데 Unity 공식 메카님 튜토리얼에서 알려준 방식과는 조금 달리 애니메이션을 사용하게 된다.

 

  How To...

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private Animator avatar;
 
void Update()
    {
        if (this.avatar.GetCurrentAnimatorStateInfo(0).IsName("Base Layer.Walk"))
        {            
           // Do something
        }        
        
        if (this.avatar.GetCurrentAnimatorStateInfo(0).IsName("Base Layer.Idle"))
        {
           // Do something
        }
    }

 

this.avatar.GetCurrentAnimatorStateInfo(0).IsName("Base Layer.Walk")를 이용하여 원하는 대로 구현하였다.

 

"Base Layer.Walk"에서 보이듯 띄어쓰기도 지켜줘야한다. 

 

  마치며...

 

이외에도 nameHash와 Animator.StringToHash(String name)으로 구현할 수 있을 것 같았으나, 애니메이션이 변경되었을때 아래의 currentBaseState.nameHash가 변경되지 않는 것을 확인하였다.

 

  1. static int currentState = Animator.StringToHash("Base Layer.Idle");
  2.  
  3. void Start (){
  4. avatar = GetComponent<Animator>();  
  5. }
  6.  
  7. void FixedUpdate ()
  8. {
  9. currentBaseState = avatar.GetCurrentAnimatorStateInfo(0); 
  10. if (currentBaseState.nameHash == currentState){
  11. Debug.Log("Do Something");
  12. }
  13. }