天天看點

Unity3D之Mecanim動畫系統——Animator Controller介紹:Animator元件建立一個Animator Controller

介紹:

Animator Controller在Unity中是作為一種單獨的配置檔案存在的檔案類型,其字尾為controller,Animator Controller包含了以下幾種功能:

  • 可以對多個動畫進行整合;
  • 使用狀态機來實作動畫的播放和切換; 
  • 可以實作動畫融合和分層播放;
  • 可以通過腳本來對動畫播放進行深度控制;

下面我們通過一個圖來直覺的看看動畫的組成結構:

Unity3D之Mecanim動畫系統——Animator Controller介紹:Animator元件建立一個Animator Controller

Animator元件用來控制人物動畫的播放,其中需要的兩個最核心的内容就是控制動畫播放邏輯的Animator Controller以及動畫骨骼Avatar對象。

Animator元件

我們需要播放動畫的角色都需要添加Animator元件,該元件即為我們控制動畫的接口,下面我們來看看Animator元件:

Unity3D之Mecanim動畫系統——Animator Controller介紹:Animator元件建立一個Animator Controller
  • Controller:使用的Animator Controller檔案。
  • Avatar:使用的骨骼檔案。
  • Apply Root Motion:綁定該元件的GameObject的位置是否可以由動畫進行改變(如果存在改變位移的動畫)。
  • Update Mode:更新模式:Normal表示使用Update進行更新,Animate Physics表示使用FixUpdate進行更新(一般用在和物體有互動的情況下),Unscale Time表示無視timeScale進行更新(一般用在UI動畫中)。
  • Culling Mode:剔除模式:Always Animate表示即使錄影機看不見也要進行動畫播放的更新,Cull Update Transform表示錄影機看不見時停止動畫播放但是位置會繼續更新,Cull Completely表示錄影機看不見時停止動畫的所有更新。

下方還會顯示我們的動畫的一些主要資訊。

Animator Override Controller

我們在右鍵建立資源時還會發現這樣的一個資源,該資源的意思是基于某個Animator Controller進行每個狀态的動畫的修改,其他設定不變,可以友善的複用我們已經建立好的Animator Controller。

建立一個Animator Controller

我們在Project視圖中右擊菜單中可以建立Animator Controller,下面我們看看新建立的Animator Controller:

Unity3D之Mecanim動畫系統——Animator Controller介紹:Animator元件建立一個Animator Controller

首先,我們發現的是3個預設的狀态,這些狀态是Unity自動幫我們建立的同時也無法删除:

  • Entry:表示當進入目前狀态機時的入口,該狀态連接配接的狀态會成為進入狀态機後的第一個狀态;
  • Any State:表示任意的狀态,其作用是其指向的狀态是在任意時刻都可以切換過去的狀态;
  • Exit:表示退出目前的狀态機,如果有任意狀态指向該出口,表示可以從指定狀态退出目前的狀态機;

建立新狀态

1.我們可以通過右鍵菜單進行建立:

Unity3D之Mecanim動畫系統——Animator Controller介紹:Animator元件建立一個Animator Controller

2.或者我們可以通過把一個Animation Clip拖拽到狀态機視窗中進行建立;

我們發現我們建立的第一個狀态被設定為預設的第一個狀态,第一個狀态會被标記為黃色,如下:

Unity3D之Mecanim動畫系統——Animator Controller介紹:Animator元件建立一個Animator Controller

我們可以通過Inspector視窗進行該狀态的設定,上篇筆記有詳細的解說。

我們可以使用這兩種方法來建立多個狀态,同時配置好每個狀态,如下:

Unity3D之Mecanim動畫系統——Animator Controller介紹:Animator元件建立一個Animator Controller

狀态切換

我們的狀态機已經有了狀态,但是還沒有指定每個狀态之間的關系,下面我們來看看該如何指定狀态之間的關系。

在Mecanim中,動畫之間的播放不再是通過調用諸如“Play”之類的方法進行切換了,而是通過判斷參數的變換來進行狀态即動畫的切換。

我們打開Parameters面闆,這裡被用來設定狀态機使用到的各種參數,如下:

Unity3D之Mecanim動畫系統——Animator Controller介紹:Animator元件建立一個Animator Controller

點選加号可以建立一個參數,在Unity中允許我們建立4種類型的參數:

Float:float類型的參數,多用于控制狀态機内部的浮點型參數;

Int:int類型的參數,多用于控制狀态機内部的整型參數;

Bool:bool類型參數,多用于狀态切換;

Trigger:本質上也是一個bool類型的參數,但是其值預設為false,且設定為true後系統會自動将其還原為false;

下面我們建立兩個簡單的Bool類型的變量,如下:

Unity3D之Mecanim動畫系統——Animator Controller介紹:Animator元件建立一個Animator Controller

我們希望,當Walk為true時人物走動,為false時人物站立,Run也是一緻,隻不過會過渡到跑動。

下面我們通過右擊狀态的菜單可以拉出一條狀态轉換的線條,表示目前狀态轉換到目标狀态。

Unity3D之Mecanim動畫系統——Animator Controller介紹:Animator元件建立一個Animator Controller

我們點選線條可以在Inspector視窗設定轉換的條件,如下:

Unity3D之Mecanim動畫系統——Animator Controller介紹:Animator元件建立一個Animator Controller

我們在條件框設定Walk為true,表示當Walk被設定為true時就從站立跳轉到走路動畫,同樣的,走路回到站立也需要一條轉換的線條,不過Walk要設定為false:

Unity3D之Mecanim動畫系統——Animator Controller介紹:Animator元件建立一個Animator Controller

Run的設定也一緻。

Has Exit Time

我們發現線條中有一個勾選項Has Exit Time,那麼它是什麼意思呢?

Unity3D之Mecanim動畫系統——Animator Controller介紹:Animator元件建立一個Animator Controller

如果我們勾選了該項,在動畫轉換時會等待目前動畫播放完畢才會轉換到下一個動畫,如果目前動畫是循環動畫會等待本次播放完畢時轉換,是以對于需要立即轉換動畫的情況時記得要取消勾選。

還有一種情況時,當我目前的動畫播放完畢後就自動轉換到箭頭所指的下一個狀态(沒有其他跳轉條件),此時必須勾選該選項,否則動畫播放完畢後就會卡在最後一幀,如果是循環動畫就會一直循環播放。

控制動畫轉換

我們在綁定了Animator元件的GameObject之上添加下面的新腳本元件,就可以實作通過按鍵來切換人物播放的動畫了:

using UnityEngine;
 using System.Collections;
 
 public class TestAnimChange : MonoBehaviour
 {
    private Animator _animator;
 
     void Start()
     {
        _animator = this.GetComponent<Animator>();
}

void Update()
{
if(Input.GetKeyDown(KeyCode.W))
{
_animator.SetBool("Walk", true);
}
if(Input.GetKeyUp(KeyCode.W))
{
             _animator.SetBool("Walk", false);
         }
if(Input.GetKeyDown(KeyCode.R))
{
_animator.SetBool("Run", true);
         }
if(Input.GetKeyUp(KeyCode.R))
{
_animator.SetBool("Run", false);
         }
}
}      

繼續閱讀