2016年4月18日 星期一

【Unity】Mecanim動畫系統Part5 - 使用Any State狀態立刻播放某段動畫

Part4
這次要來談Mecanim動畫系統下預設的動畫狀態─Any State,就如它的命名方式,Any State可以在達成條件時,立刻進入某一個動畫片段。
Any State在Animator視窗中是一個淺藍色狀態,可建立連結到其他動畫,但不可被其他動畫連結。
Unity Mecanim

以下圖的動畫狀態為例,Move、Rotate和Color之間為動畫時間結束自動切換,Any State的轉換則是color變數為true時,進入Color動畫。
Unity Mecanim
執行後的結果:
Unity Mecanim
接著要建立讓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時,會看到以下結果:
Unity Mecanim
當按下按鍵時,可以看到確轉換到Color動畫,但並沒有順利播放,這並不是Any State功能出了什麼問題,而是Any State在條件成立時,持續著轉換到Color動畫的動作。
所以當Any State的動畫轉換完成後,轉換條件就不能再成立,直到按鍵再度被按下為止。
在被轉換到的動畫上新增腳本,用來避免轉換條件持續成立。
Unity Mecanim
新增好後,可以看到一個繼承StateMachineBehaviour的腳本,這裡要使用當中的OnStateEnter,也就是當進入當下的動畫狀態時,要執行的動作:
using UnityEngine;
public class ColorState : StateMachineBehaviour {
    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        animator.SetBool("color", false);
    }
}
這裡就將color變數再設為flase。
再一次執行看看:
Unity Mecanim
以上就是大略的提一下Any State的功能,用在即時而且一次性的動畫片段,可以簡化許多動畫轉換的設計,這次就到這裡。
補充:
http://unitytaiwan.blogspot.tw/2014/07/unity-50.html

沒有留言:

張貼留言

【自製小遊戲】水平思考猜謎(海龜湯)

遊戲連結 海龜湯的玩法是由出題者提出一個難以理解的事件,參與猜題者可以提出任何問題以試圖縮小範圍並找出事件背後真正的原因。但出題者僅能以「是」、「不是」或「沒有關係」來回答問題。 本遊戲蒐集各種論壇、平台的42個題目,提供給想玩海龜湯卻愁找不到題目的你們。 ...