Unity3D之Mecanim動畫系統(tǒng):Animator Controller

簡介

Animator Controller在Unity中是作為一種單獨的配置文件存在的文件類型,其后綴為controller,Animator Controller包含了以下幾種功能:

可以對多個動畫進行整合;

使用狀態(tài)機來實現(xiàn)動畫的播放和切換;

可以實現(xiàn)動畫融合和分層播放;

可以通過腳本來對動畫播放進行深度控制;

下面我們通過一個圖來直觀的看看動畫的組成結(jié)構(gòu):

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

Animator組件

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

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表示攝像機看不見時停止動畫播放但是位置會繼續(xù)更新,Cull Completely表示攝像機看不見時停止動畫的所有更新。

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

Animator Override Controller

我們在右鍵創(chuàng)建資源時還會發(fā)現(xiàn)這樣的一個資源,該資源的意思是基于某個Animator Controller進行每個狀態(tài)的動畫的修改,其他設(shè)置不變,可以方便的復用我們已經(jīng)創(chuàng)建好的Animator Controller。

創(chuàng)建一個Animator Controller

我們在Project視圖中右擊菜單中可以創(chuàng)建Animator Controller,下面我們看看新創(chuàng)建的Animator Controller:

首先,我們發(fā)現(xiàn)的是3個默認的狀態(tài),這些狀態(tài)是Unity自動幫我們創(chuàng)建的同時也無法刪除:

Entry:表示當進入當前狀態(tài)機時的入口,該狀態(tài)連接的狀態(tài)會成為進入狀態(tài)機后的第一個狀態(tài);

Any State:表示任意的狀態(tài),其作用是其指向的狀態(tài)是在任意時刻都可以切換過去的狀態(tài);

Exit:表示退出當前的狀態(tài)機,如果有任意狀態(tài)指向該出口,表示可以從指定狀態(tài)退出當前的狀態(tài)機;

創(chuàng)建新狀態(tài)

1.我們可以通過右鍵菜單進行創(chuàng)建:

2.或者我們可以通過把一個Animation Clip拖拽到狀態(tài)機窗口中進行創(chuàng)建;

我們發(fā)現(xiàn)我們創(chuàng)建的第一個狀態(tài)被設(shè)置為默認的第一個狀態(tài),第一個狀態(tài)會被標記為黃色,如下:

我們可以通過Inspector窗口進行該狀態(tài)的設(shè)置,上篇筆記有詳細的解說。

我們可以使用這兩種方法來創(chuàng)建多個狀態(tài),同時配置好每個狀態(tài),如下:

狀態(tài)切換

我們的狀態(tài)機已經(jīng)有了狀態(tài),但是還沒有指定每個狀態(tài)之間的關(guān)系,下面我們來看看該如何指定狀態(tài)之間的關(guān)系。

在Mecanim中,動畫之間的播放不再是通過調(diào)用諸如“Play”之類的方法進行切換了,而是通過判斷參數(shù)的變換來進行狀態(tài)即動畫的切換。

我們打開Parameters面板,這里被用來設(shè)置狀態(tài)機使用到的各種參數(shù),如下:

點擊加號可以創(chuàng)建一個參數(shù),在Unity中允許我們創(chuàng)建4種類型的參數(shù):

Float:float類型的參數(shù),多用于控制狀態(tài)機內(nèi)部的浮點型參數(shù);

Int:int類型的參數(shù),多用于控制狀態(tài)機內(nèi)部的整型參數(shù);

Bool:bool類型參數(shù),多用于狀態(tài)切換;

Trigger:本質(zhì)上也是一個bool類型的參數(shù),但是其值默認為false,且設(shè)置為true后系統(tǒng)會自動將其還原為false;

下面我們創(chuàng)建兩個簡單的Bool類型的變量,如下:

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

下面我們通過右擊狀態(tài)的菜單可以拉出一條狀態(tài)轉(zhuǎn)換的線條,表示當前狀態(tài)轉(zhuǎn)換到目標狀態(tài)。

我們點擊線條可以在Inspector窗口設(shè)定轉(zhuǎn)換的條件,如下:

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

Run的設(shè)定也一致。

Has Exit Time

我們發(fā)現(xiàn)線條中有一個勾選項Has Exit Time,那么它是什么意思呢?

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

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

控制動畫轉(zhuǎn)換

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


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在Unity3D的當前版本中,Animator Controller已經(jīng)全面取代了原來(大概是4.x版本左右)的A...
    shimmery閱讀 11,291評論 3 26
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,703評論 4 61
  • 喜歡過,也只是喜歡,就算到哪里看到有他名字里的一個字眼,心里也會悸動。有開頭結(jié)尾的故事才叫故事??晒适逻B個開頭都沒...
    聽說瘋帽喜歡愛麗絲閱讀 204評論 0 0
  • E57 A shotgun-wielding man, appearing to be in his 20s an...
    一日一譯閱讀 155評論 0 1
  • 爸爸因為在??趯W車,上午給我打電話說有點時間要過來看看寶寶,我真開心。 寶寶還沒到三個月那會在外婆家住了一周,算算...
    云卷云舒2017閱讀 269評論 0 0

友情鏈接更多精彩內(nèi)容