Unity Animator動畫狀態機 深入理解(一)


接觸Unity以來就已經有了Animator,Animation用的少,不過也大概理解他倆之間的一個區別於聯系。

圖中其實就是Animator和Animation之間的區別於聯系了,啊!你肯定會告訴我這就不是Animator么。

對啊,Animator其實是由Animation組成的。比如在Animator沒有出現的時候有些公司寫的動畫狀態機其實就是代碼版的Animator。

Animator其實就是把Animation統一管理和邏輯狀態管理的組件,而Animation就是每一個動畫。

動畫狀態機推薦游客學院的一篇教程。

 

Animator給了我們更方便的圖形化狀態管理。但是你想不寫代碼,還是不行。

但是代碼會方便許多,用一個腳本就可以管理整個Animator狀態機了~

其實也是角色執行的邏輯狀態機~

using UnityEngine;
using System.Collections;

public class AnimatorMove : MonoBehaviour {

    public float DirectionDampTime = .25f;
    private Animator animator;
    
    void Start () {
        animator = GetComponent<Animator>();
    }
    
    
    void Update ()
    {
        if (animator == null) return;

        AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
        if (stateInfo.IsName("Base Layer.Run"))
        {
            if (Input.GetButton("Fire1"))
                animator.SetBool("Jump", true);
        }
        else
            animator.SetBool("Jump", false);
        if (Input.GetButtonDown("Fire2") && animator.layerCount >= 2)
            animator.SetBool("Hi", true);
        else
            animator.SetBool("Hi", false);
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        animator.SetFloat("Speed", h * h + v * v);
        animator.SetFloat("Direction", h, DirectionDampTime, Time.deltaTime);
    }
}

這是一段比較簡單的人物控制腳本,能控制人物的跑跳和打招呼。

其實就是控制一下過度的條件經過什么的操作是否允許過度。

 

通過上述的條件來控制動畫的過度,那何為動畫過度(Transition)呢?

這就是簡單的動畫過度控制,在Animator中能比較方便直觀的修改。Transition就是所謂的過度

Settings就能調整過度的時間和銜接。

Conditions就是所謂的過度條件。

注意:如果一個動畫有Conditions建議取消Has Exit Time,會出現無法及時觸發的問題。

Has Exit Time就是必須過度的時間,處於這個時間時,是不允許任何對動畫的操作的。

 

以上都是比較基礎的Animator操作,后續會寫一些關於IK。Blend Tree。二維混合樹。同步動畫層。多通道IK。等知識。


免責聲明!

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



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