Unity - 如何取得Animator目前的狀態

  Unity的Animator是個很好用的功能,同時還提供圖形化的操控,但是在使用Animator的時候要如何去判斷目前的狀態是什麼呢,因為掛載Animator的物件身上只有這一個controller並沒有Animation,所以該如何取得目前的狀態就會有個小問題。




  從上面這張圖可以得到目前這個Animator有兩個狀態互相切換,各自有各自的名稱(anim跟anim2),同時左上角可以得到這個Layer的名稱(Base Layer)。
  然後直接使用狀態資訊來比對就好,只是名稱不能用string來比對而已。

Code說明
public Animator animator;
void Update () {
   //先取得目前狀態的資訊
   AnimatorStateInfo currentState = animator.GetCurrentAnimatorStateInfo(0);

   //然後直接比對名稱就好,但是狀態資訊中並不是用string來存,所以把名稱轉Hash來比對,格式[Layer name].[state name]
   if(currentState.nameHash == Animator.StringToHash("Base Layer.anim")) {
      Debug.Log("This is Anim 1");
   }
   if(currentState.nameHash == Animator.StringToHash("Base Layer.anim2")) {
      Debug.Log("This is Anim 2");
   }

   //或是先定義一個參數
   public int myState = Animator.StringToHash("Base Layer.anim");
   if(currentState.nameHash == myState ) {
      Debug.Log("This is Anim 1");
   }
}

No comments:

Post a Comment