通過Unity動畫狀態機,能幫我們輕松處理轉換各個動畫片斷,達到想要的效果,但是如果僅僅是一個個動畫的硬生生的切換,那么看起來就非常突然,而不真實了,在質量要求比較高的游戲中,特別是動作游戲,我們就不能直接簡單地用Translation連起來了,而應該使用動畫融合樹。
准備工作:一個人物模型,一個待機動畫,一個行走動畫,一個奔跑動畫。
通常游戲中,我們人物從待機到跑直接切換就行,今天我們加一個行走的過渡效果吧。
創建一個動畫控制器AnimatorController,將人物的Animator組件的Controller屬性指向我們剛才創建的AnimatorController。
在AnimatorController中添加一個空狀態Idel,然后設置動畫片斷為我們的待機動畫。
然后再創建一個動畫融合樹WalToRun:
雙擊融合樹進入編輯狀態,在右側的Inspector面板中的Motion列表中添加兩個元素,從上到下依次選擇我們的行走動畫和奔跑動畫。
創建float類型動畫參數Run,將融合樹的Parameter參數設置為Run:
最后,將待機狀態Idel使用Translation連接到融合樹,設置Condition參數為 Run Greater 0.1,反過來融合樹到Idel的連接Condition設置為 Run Less 0.1。
一切就緒,在Player身上添加腳本DearMove:
1 using UnityEngine; 2 using System.Collections; 3 4 public class DearMove : MonoBehaviour 5 { 6 private Animator anim; //動畫狀態機 7 private int RunFloat; //Run參數ID 8 private float vertical; //前進 9 10 void Awake () 11 { 12 anim = gameObject.GetComponent<Animator>(); 13 RunFloat = Animator.StringToHash("Run"); 14 } 15 16 void Update () 17 { 18 //呼叫方向控制 19 vertical = Input.GetAxis("Vertical"); 20 //根據前進控制,設置Run參數的值, 21 //后面兩個參數可不加,這里是為了讓從走到跑看得更明顯 22 anim.SetFloat(RunFloat, vertical, 1f, Time.deltaTime); 23 } 24 }
運行游戲,按住 W 鍵,可以看到Player從走慢慢過渡到跑咯!