標籤:
通過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從走慢慢過渡到跑咯!
AnimatorController動畫融合樹