Unity3D之Mecanim動畫系統學習筆記(五):Animator Controller

簡介

Animator Controller在Unity中是做爲一種單獨的配置文件存在的文件類型,其後綴爲controller,Animator Controller包含了如下幾種功能:ide

  • 能夠對多個動畫進行整合;
  • 使用狀態機來實現動畫的播放和切換;
  • 能夠實現動畫融合和分層播放;
  • 能夠經過腳原本對動畫播放進行深度控制;

下面咱們經過一個圖來直觀的看看動畫的組成結構:動畫

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

Animator組件

咱們須要播放動畫的角色都須要添加Animator組件,該組件即爲咱們控制動畫的接口,下面咱們來看看Animator組件:spa

  • 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表示攝像機看不見時中止動畫的全部更新。

下方還會顯示咱們的動畫的一些主要信息。3d

Animator Override Controller

咱們在右鍵建立資源時還會發現這樣的一個資源,該資源的意思是基於某個Animator Controller進行每一個狀態的動畫的修改,其餘設置不變,能夠方便的複用咱們已經建立好的Animator Controller。code

建立一個Animator Controller

咱們在Project視圖中右擊菜單中能夠建立Animator Controller,下面咱們看看新建立的Animator Controller:orm

首先,咱們發現的是3個默認的狀態,這些狀態是Unity自動幫咱們建立的同時也沒法刪除:對象

  • Entry:表示當進入當前狀態機時的入口,該狀態鏈接的狀態會成爲進入狀態機後的第一個狀態;
  • Any State:表示任意的狀態,其做用是其指向的狀態是在任意時刻均可以切換過去的狀態;
  • Exit:表示退出當前的狀態機,若是有任意狀態指向該出口,表示能夠從指定狀態退出當前的狀態機;

建立新狀態

1.咱們能夠經過右鍵菜單進行建立:blog

2.或者咱們能夠經過把一個Animation Clip拖拽到狀態機窗口中進行建立;接口

咱們發現咱們建立的第一個狀態被設置爲默認的第一個狀態,第一個狀態會被標記爲黃色,以下:

咱們能夠經過Inspector窗口進行該狀態的設置,上篇筆記有詳細的解說。

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

狀態切換

咱們的狀態機已經有了狀態,可是尚未指定每一個狀態之間的關係,下面咱們來看看該如何指定狀態之間的關係。

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

咱們打開Parameters面板,這裏被用來設置狀態機使用到的各類參數,以下:

點擊加號能夠建立一個參數,在Unity中容許咱們建立4種類型的參數:

Float:float類型的參數,多用於控制狀態機內部的浮點型參數;

Int:int類型的參數,多用於控制狀態機內部的整型參數;

Bool:bool類型參數,多用於狀態切換;

Trigger:本質上也是一個bool類型的參數,可是其值默認爲false,且設置爲true後系統會自動將其還原爲false;

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

咱們但願,當Walk爲true時人物走動,爲false時人物站立,Run也是一致,只不過會過渡到跑動。

下面咱們經過右擊狀態的菜單能夠拉出一條狀態轉換的線條,表示當前狀態轉換到目標狀態。

咱們點擊線條能夠在Inspector窗口設定轉換的條件,以下:

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

Run的設定也一致。

Has Exit Time

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

若是咱們勾選了該項,在動畫轉換時會等待當前動畫播放完畢纔會轉換到下一個動畫,若是當前動畫是循環動畫會等待本次播放完畢時轉換,因此對於須要當即轉換動畫的狀況時記得要取消勾選。

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

控制動畫轉換

咱們在綁定了Animator組件的GameObject之上添加下面的新腳本組件,就能夠實現經過按鍵來切換人物播放的動畫了:

 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class TestAnimChange : MonoBehaviour
 5 {
 6     private Animator _animator;
 7 
 8     void Start()
 9     {
10         _animator = this.GetComponent<Animator>();
11     }
12     
13     void Update()
14     {
15         if(Input.GetKeyDown(KeyCode.W))
16         {
17             _animator.SetBool("Walk", true);
18         }
19         if(Input.GetKeyUp(KeyCode.W))
20         {
21             _animator.SetBool("Walk", false);
22         }
23         if(Input.GetKeyDown(KeyCode.R))
24         {
25             _animator.SetBool("Run", true);
26         }
27         if(Input.GetKeyUp(KeyCode.R))
28         {
29             _animator.SetBool("Run", false);
30         }
31     }
32 }
相關文章
相關標籤/搜索