2016年4月8日 星期五

【Unity】Mecanim動畫系統Part4 - 使用腳本做動畫轉換

Part3
這次要來談使用腳本轉換Animator下的動畫,首先看到Animator的編輯視窗,點擊Parameters,按下+按鈕可以建立變數。
Unity Mecanim
可建立的變數有Float、Int、Bool和Trigger,變數右邊欄位可以設定初始值,之後會透過改變這裡的變數數值,做動畫的轉換。
Unity Mecanim

建立好轉換變數後,點擊要用腳本控制的轉換箭頭,由於接下的動畫轉換是由變數作條件,所以將Has Exit Time的打勾取消,另外這裡不做動畫間的過渡,將Transition Duration設為0。
Unity Mecanim
再來看到Conditions的地方,按+按鈕新增轉換的條件,新增後可以看到三個欄位,依左至右分別是變數、條件和數值,以下圖的設定float, Greater, 2.0為例,也就是當變數float大於2.0時,這個動畫轉換就會執行。
Unity Mecanim
上述動作結束後,轉換條件就算是建立好了,接下來就是透過控制變數的數值做動畫轉換,點擊動畫物件,這裡使用C#,新增控制腳本,AnimatorControl.cs。
Unity Mecanim
下面是腳本內容:
using UnityEngine;
public class AnimatorControl : MonoBehaviour {
    private Animator animator;//(1)
    private float f;//(2)
    void Start () {//(3)
        animator = GetComponent<Animator>();
        f = 0;
    }
 void Update () {
        if (Input.GetKey(KeyCode.D)) {
            f += Time.deltaTime;//(4)
        }
        animator.SetFloat("float", f);//(5)
    }
}
(1)宣告Animator變數,用來抓取動畫物件下的Animator
(2)宣告float變數f,用來做Animator下變數的設定。
(3)初始化上面兩個變數。
(4)按下鍵盤D增加變數f的數值。
(5)透過SetFloat將變數f的值帶入Animator下的float變數。
以下是執行結果:
Unity Mecanim
這裡我補了按鈕和數值顯示可以看得比較清楚,從動畫Move轉換到Rotate的條件是float變數大於2.0,Rotate到Color條件是float變數大於4.0。
這次就差不多到這裡,最後再稍微做些補充,這次變數是使用鍵盤控制,當然根據狀況不同,可能會是遊戲時間、物件碰撞等等狀況來控制,另外這次只使用到浮點數,整數的條件和浮點數大同小異,但多了一個等於的條件,而布林變數就是true與false,至於trigger目前還沒碰過,之後會找機會試試,下一篇預計是Animator內預設的三個狀態。
延伸閱讀:
【Unity】Animator2D動畫切換 - 待機>行走>跑步
Part5

1 則留言:

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

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