這次要來談Mecanim動畫系統下預設的動畫狀態─Any State,就如它的命名方式,Any State可以在達成條件時,立刻進入某一個動畫片段。
Any State在Animator視窗中是一個淺藍色狀態,可建立連結到其他動畫,但不可被其他動畫連結。
以下圖的動畫狀態為例,Move、Rotate和Color之間為動畫時間結束自動切換,Any State的轉換則是color變數為true時,進入Color動畫。
執行後的結果:
接著要建立讓color變數設為true的腳本,這裡就單純的使用鍵盤控制,當按下按鍵D時將color變數設為true。
using UnityEngine; public class AnimatorControl : MonoBehaviour { private Animator animator; void Start () { animator = GetComponent<Animator>(); } void Update () { if (Input.GetKeyDown(KeyCode.D)) animator.SetBool("color", true); } }123
執行後並按下按鍵D時,會看到以下結果:
當按下按鍵時,可以看到確轉換到Color動畫,但並沒有順利播放,這並不是Any State功能出了什麼問題,而是Any State在條件成立時,持續著轉換到Color動畫的動作。
所以當Any State的動畫轉換完成後,轉換條件就不能再成立,直到按鍵再度被按下為止。
在被轉換到的動畫上新增腳本,用來避免轉換條件持續成立。
新增好後,可以看到一個繼承StateMachineBehaviour的腳本,這裡要使用當中的OnStateEnter,也就是當進入當下的動畫狀態時,要執行的動作:
using UnityEngine; public class ColorState : StateMachineBehaviour { override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { animator.SetBool("color", false); } }這裡就將color變數再設為flase。
再一次執行看看:
以上就是大略的提一下Any State的功能,用在即時而且一次性的動畫片段,可以簡化許多動畫轉換的設計,這次就到這裡。
補充:
http://unitytaiwan.blogspot.tw/2014/07/unity-50.html
沒有留言:
張貼留言