u3d Mecanim動畫


作為Unity4.0的主要更新功能,Mecanim動畫被寄予了很多的期望。系統有先進的地方,也有不足的地方。這些我們留到最后再來總結。

         阿趙粗略的學習了一下,寫下以下的教程。這篇教程簡單的說明了Mecanim系統的用法和控制方式,里面用到的資源,是從AssetStore里面下載的,如果有興趣的朋友可以去免費下載。

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙        
 

學習目標:

         我預先准備了幾個沒有帶動畫的3d模型,fbx格式,然后一些導出好的動畫文件。

我們要做的事情,就是使用新的動畫系統,把這些動畫做出狀態機,賦予給這些沒有動畫的模型。這樣得到的好處就是,我們可以把模型制作和動畫制作分開了,只要我們的模型分別蒙皮了,就可以比較隨意的共享使用相同的動畫。如果狀態機控制得當的話,人物的動畫控制也會比較容易。

 

准備工作:

准備幾個這種已經蒙好皮,但沒有動作的FBX模型:

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

幾個現成的動畫文件。這些文件可以是用Maya直接導出,或者用3Dmax直接導出了帶動畫的Fbx文件,然后在Unity的導入器里面切割。

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

這個切割的過程和之前的動畫系統一樣:

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

 

開始制作:

從Unity4.0開始,模型導入器的選項變化比較大,他分為了Model、Rig和Animations三個標簽。

Model標簽頁和以前的基礎設置差不多,還是網格、法線和索引、材質的設置:

 Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙 

Animations標簽欄里面的內容和上面的切割動畫時是一樣的,不過對於沒有帶動畫的模型,我們可以把導入動畫的選項取消。

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

Rig標簽欄是重點:

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

我們想要使用新的Mecanim系統,必須讓模型擁有一個設置好的Avatar,所以我們必須把Rig里面的內容選成這樣:

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

Avatar可以是從本身的模型創建,或者從其他Avatar拷貝過來。選擇了之后,我們還可以通過圖片內紅框的按鈕來打開Avatar的編輯器。

 

在項目資源瀏覽器里面找到該FBX模型,我們可以看到,紅框所標記的文件,就是該模型的Avatar了。

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

在這里也可以打開Avatar的編輯器。

 Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

下面我們就開始制作Avatar:

打開Avatar的時候,會提示你保存現有的場景。因為Avatar是會打開新的獨立場景來編輯的。

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

這個是Avatar的選項。分為了身體(Body)、頭部(Head)、左手(Left Hand)、右手(Right Hand)四個部分。每個部分分別有幾個骨骼,我們需要做的事情,就是把我們准備好的人物身上的骨骼指定到這些部位。

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

這里估計也不需要過多的解釋了,當你點擊一個選項的時候,在上面的人體圖會標記處當前選擇的部位,比較直觀。

 

如 果覺得逐個骨骼指定很麻煩,我們也可以從下面的Mapping里面選擇自動適配(Automap),這樣Unity會幫你識別人物結構並指定骨骼。我試了 一下,這個自動適配的准確率還是很高的。不過一些細節部位,比如手指和眼之類,還是要自己指定。除了自動適配,我們還可以保存和讀取設置。

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

指定好了,我們想保存,不過發現提示有錯誤,角色不是在T的姿勢。

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

在Pose里面選擇Enforce T-Pose

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

這樣角色就會變成了T型的姿勢。現在我們可以保存這個Avatar了。

做好的Avatar還可以在Muscles欄里面測試蒙皮的效果,在里面可以針對不同的部位做一些動作,比如彎曲身體,扭腰等,看看蒙皮的效果十分正常。

 

接下來我們要制作動畫控制器。

需要的材料就是我們剛才准備了的幾個動畫。

 Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

這是Mecanim動畫系統的Animator組件,你只需要把剛才的FBX模型拖到場景,就能看到:

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

拖到場景中后,發現模型不會播放動畫,這是因為紅框標記的地方缺少了動畫控制器。接下來我們就來制作自己的動畫控制器。

 Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

在項目資源管理器里面右鍵,創建Animator Controller。

 Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

一個新的Animator Controller被創建出來了。

 

接下來我們需要打開Animator編輯面板:

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

這就是默認的Animator面板:

 Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

選擇剛才我們新建的Animator Controller,然后把動畫拖入Animator面板:

 Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

現在我們的控制器里面有4段動畫了。如果現在把這個控制器拖給人物,人物就會播放默認的動作。現在的默認動作是death,我們想把默認動作指定成idle2。

右鍵單擊idle2,然后選擇Set As Default:

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

這時候,idle2的顏色已經變了,它變成了默認的動作:

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

 

接下來我們分析一下,這個上面寫着idle2的方塊究竟代表了什么意思吧:

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

在屬性欄里面,我們可以看到,這個方塊代表了一個動作。而這個方塊可以設置播放的速度。可以指定方塊里面代表的動畫片段。可以指定是否啟用腳部IK。就算剛才我們拖了的這個方塊是idle2,我們也可以手動在這里選擇另外的動畫片段。

 

除了代表現有的動畫片段,這個方塊還可以代表某幾個動畫的融合。

這里我們需要建立一個新的混合樹:

右鍵點擊idle2,然后選擇Create newBlendTree in State

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

現在再看屬性,我們看到在Motion里面不再是現有的動畫片段,而是Blend Tree了。

 Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

這時候雙擊idle2方塊,會進入下一層級

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

里面有一個Blend Tree。

 

在屬性欄里面點擊加號,可以添加多段動畫給混合樹。

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

比如我們這里新建兩個動畫片段,然后把idle0和idle2拖進去。

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

再看混合樹的圖示,會發現出現了兩個節點。我們可以通過調節Blend的數字來控制動畫混合的影響權重。

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

 

到此為止,動畫方塊代表的內容我們已經了解清楚了。

接下來需要做的,就是把這些動畫連接起來,比如從idle2到death的動畫,我們過可以建立一個單向的指向轉換。這代表着,當達到某個條件的時候,角色會從做idle2動畫轉變成death動畫。

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

右擊idle2,然后選擇Make Transition,可以拉出一個箭頭線段:

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

當然反過來,就可以創建一條從death到idle2的箭頭線段了。

 Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

剛才說了,這個箭頭線段代表了在某個條件達到后,動畫的轉換。那么這個條件在哪里設置呢?

我們可以選擇一條箭頭線段,然后

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

看到屬性欄里面,有這條線段的設置。包括了上一段動畫、下一段動畫之間的過渡情況,還有過渡時的條件(Conditions)。這個條件是可以多個的,可以按加號添加。

 Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

現在我們點擊第一個默認的條件(Exit Time),我們發現沒有其他的選擇,也就是說,現在動畫之間只能通過時間作為條件來過渡,當上一個動畫播放到一定時間后,就會轉到下一個動畫。

 

那么怎樣設置其他的條件呢?

在animator面板的左下角,我們找到參數選項,點擊加號添加。

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

比如我們現在創建兩個布爾的參數

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

創建完之后,我們需要輸入參數的名稱。這里我們想使用布爾來控制是否可以轉換動畫,所以我們把這兩個參數起名為Idle2ToDeath和DeathToIdle2。

 Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

現在回到剛才選擇條件的地方,我們發現,

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

剛才設置的兩個參數已經可以選擇了,也就代表了,我把idle2到death的線的條件設置成Idle2ToDeath,那么只有當Idle2ToDeath為true的時候,這個動畫的轉換才會成立。

為了試驗,我們把idle2到death的線的條件還是保持默認的Exit Time,不過把death到idle2的線的條件變成了DeathToIdle2。

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

 

現在我們可以把這個新作的Animator Controller拖到人物身上:

 Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

現 在播放,我們可以看到人物先顯示了idle2的動畫,然后會接着播放death的動畫,最后人物倒在地上不動了。這是因為,idle2到death的條件 是時間,所以過一定的時候后,就會接着播放death,但到了death后,由於回到idle2的條件是DeathToIdle2 = true,但默認是false的,所以人物不能回到idle2的狀態。

 

為了使人物在我們希望的時候回到idle2狀態,我們需要編寫一個腳本:

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

當按下按鈕時,使用SetBool的方法把指定的DeathToIdle2設定為true。

 

把 腳本拖到攝像機上面,或者隨便一個物體上面,然后把人物拖到animator變量上。然后播放,我們可以看到,屏幕上面多了一個按鈕。當人物倒下后,我們 按這個按鈕,人物會回到了idle2的狀態。不過這時候有一個問題,人物不能再到death的倒地狀態了。這是因為,在我們按按鈕的時候,把 DeathToIdle2永久的變成了true。這樣,只要人物到達了death的狀態,就立刻變回了idle2狀態。

 

這樣明顯是不行的,所以我們再對腳本進行一些修改:

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

這里使用了一個AnimatorStateInfo來判斷當前狀態機的狀態。假如當前是某個層的某個動作,就怎么怎么樣。原理就是這樣。

然后再根據情況把一些之前設定了布爾為true的變量在一定條件時變回false。

 

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

然后再在cmds里面填入一個元素,“idle2”。

 

現在再播放,會發現人物倒地之后就不起來了,然后按按鈕,人物又會起來到idle2的狀態,接着又倒下。

 

我們如果把其他的動作加進來,會有這樣的效果:

Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

除 了death到idle2是需要用布爾條件,其他的單向線條都是使用時間作為條件。這時候,我們播放,會看到人物先做idle2的動作,然后做idle1 動作,再做idle0動作,最后做death動作,倒下后就不起來了,按按鈕后,人物起來,再重復上面的動作,最后又倒下。

 

這里給我們的提示是,我們可以通過這樣的單向線條和條件,把一些單個的動作連接成一套完整的動作,最常用的就是過場動畫了,或者是動作游戲的連招。

明白了布爾的控制,我們也可以舉一反三的使用其他的參數作為條件。

比如可以使用float作為條件,連接着站立、走路、跑步三個動作,然后通過人物的實際移動速度,來控制三個動作的狀態。

 

 

最后,我們把上面的例子做完整吧。

 Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

把4個動畫連接好,除了idle0到idle2、idle1到idle2是用時間控制,其他的都是用布爾控制。所以我們還有添加相應的參數

 Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

這個結構代表了什么?代表了默認的動作是idle2,播放idle0和idle1結束后都會回到默認的idle2。而我們可以通過按鈕,控制idle2到各個動作,還有death倒地后回到idle2也是用按鈕來控制。

 

最后的腳本,修改一下CheckState方法:

 Unity3D 4.0新功能:Mecanim動畫系統基礎教程 - 阿趙 - 有爪的小羔羊阿趙

好了,這樣,我們的人物已經可以通過腳本控制他在各個動作狀態之間轉換了。

做完了一個人物,假如我們還有另外的角色需要做同樣的東西,那么只需要給那名角色模型建立好Avatar,然后把之前做好的Animator Controller拖給他就行了,這樣不同模型之間的動畫就可以共享了。

 

做完了例子,再來說說這個Mecanim動畫系統的優缺點吧。

優點:

1、不同骨骼的模型可以較簡單的共享骨骼動畫;

2、狀態機的控制會比較有系統性。

 

缺點:

1、Unity內置的Avatar似乎只針對標准的兩足類生物,比如人。當然你要做四足類的估計還是可以的,但多足類的大概就不行了。而且人物身上假如還有翅膀、飄帶、裙擺等骨骼的話,就不能直接對應Avatar了。

2、 Animator Controller必須手動的拖給人物模型的Animator組件上。雖然也有編輯器的方法可以批量的指定。但發布后想在運行途中用腳本修改 Animator Controller是很困難的(不是絕對不行,而是需要特殊的方法)。這樣就增大了對編輯器的依賴性,減低了控制的靈活性。

3、 Mecainm系統動畫不適用於assetBundle。也就是說,這個動畫系統無法用於網絡資源的動態加載。包括了整個角色帶Animator Controller導出或者分開導出,再加載進來都無法使用。這是致命的傷害,只能做一些小的演示,或者全部資源都放在一起打包發布的項目。

 

根 據阿趙我的感覺,Unity3D的這個新的動畫系統,還處於初級階段,離正常的項目使用還是有一段挺長的距離的。可惜的是,Unity在4.0的時候就急 於把它推出來,並作為了默認的動畫組件。這樣將會給使用Unity進行項目開發的人帶來了較大的不便。希望Unity官方會繼續把這個功能改進,讓它能真 正的強大起來。


免責聲明!

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



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