/// <summary> /// 轉換狀態 /// </summary> /// <param name="_state"></param> /// <returns></returns> IEnumerator Transit(string _state) { if (SubscribeStateLibrary.ContainsKey(sNextState)) //防呆!如果沒有註冊該狀態跳Log { AnimPlayer.SetBool(sCurrentState, false); //(Animator)把原本進這狀態的transition關上 LeaveCurrentState(SubscribeStateLibrary[sCurrentState]); //執行Leave sCurrentState = sNextState; //目前狀態->新的狀態 sNextState = null; //把排隊的位置清掉 bAllowTransit = false; //新的狀態即重新計算可轉換的時機 AnimPlayer.SetBool(sCurrentState, true); //(Animator)打開前往下一個狀態的transition TransitCurrentState(SubscribeStateLibrary[sCurrentState]); //執行Transit StartCoroutine(InputController()); //從轉換開始當下已開始跑下一狀態的動作,因此剛轉換呼叫為準 } else { Debug.Log("An accidental state be called !"); //防呆!如果沒有註冊該狀態跳Log } yield return(new WaitUntil(() => AnimPlayer.IsInTransition(0) == false)); //(Animator)等,直到動作切換結束 EnterCurrentState(SubscribeStateLibrary[sCurrentState]); //轉換結束後呼叫Enter該狀態改變規範 }