Unity---動畫系統學習(4)---使用混合樹(Blend Tree)來實現走、跑、轉彎等的動畫切換


1. 介紹

Blend Tree用於多個動畫之間的混合,比如走到跑的切換、轉彎的切換。
如果用動畫學習筆記(3)中的方法,需要新建很多的狀態,不僅麻煩,而且切換狀態時也很容易不流暢。
Blend Tree就很好的解決了這個問題

2. 1D Blend Tree 的使用

右鍵新建一個Blend Tree,雙擊

在右側添加三個Motion,Idle、Walk、Run(使用動畫學習筆記2中的資源)

Parameter:設置動畫根據哪個參數進行融合
Automate Thresholds:是否自動選擇參數
選擇參數Parameter為Speed,取消勾選Automate Thresholds。
動畫學習筆記(3)中,我們就是使用Speed來控制Walk動畫的播放,當按下W時,Speed的值插值增加到1,當按下Shift時,從Walk動畫切換到Run動畫。
在這里我們同樣使用Speed,不同於3的是把Walk和Run融合到一起,按下W會先從Idle切換到Walk,再變為Run,這樣就會顯得比較自然流暢。

在Compute Thresholds中選擇Speed,會根據動畫的偏差給走和跑賦一個值(也可以自己微調)。
注意這里Speed的值范圍是從0~4.1

    private int speedID = Animator.StringToHash("Speed");
    private float speedMax = 4.1f

    private Animator anim;

    void Start()
    {
        anim = gameObject.GetComponent<Animator>();
    }

    void Update()
    {
        anim.SetFloat(speedID, Input.GetAxis("Vertical")*speedMax);
    }


可以發現三個動作的切換非常的流暢

3. 2D Blend Tree的使用

2D Simple Directional:適用於動畫都有不同的方向。
2D Freeform Directional:和第一個區別是可以有動畫在一個方向上。要保證一個在原點(0,0)的動畫,比如idle
2D Freeform Cartesian:適用於動畫不表示不同的方向

新建兩個參數:SpeedZSpeedRotate,一個控制直線移動,一個控制轉彎。
添加5個動畫

我們使用2D Freeform Directional
設置X Position From---Augular Speed(Deg角度)
設置Y Position From---VelocityZ(Z軸速度)

系統會根據偏移自動設置好,我們只需要使用這個值就可以了。

代碼

    private int speedZID = Animator.StringToHash("SpeedZ");
    private int speedRotateID = Animator.StringToHash("SpeedRotate");
    private float speedMax = 4.1f;
    private float speedRotateMax = 126.1f;
    private float dampTime = 0.2f;

    private Animator anim;

    void Start()
    {
        anim = gameObject.GetComponent<Animator>();
    }

    void Update()
    {
        anim.SetFloat(speedZID, Input.GetAxis("Vertical")*speedMax);
        anim.SetFloat(speedRotateID, Input.GetAxis("Horizontal")*speedRotateMax,dampTime,Time.deltaTime);
    }
	//SetFloat的另一種重載方式
    //第3個參數表示完成變化所需要的時間,可以給一個比較小的值,相當於自帶了一個插值運算Lerp,是動畫更加平滑
    //第4個參數表示執行該方法的時間間隔,我們的動畫是每幀都在運動,所以設置為Time.deltaTime


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM