Unity3d 4.0新動畫系統Mecanim用法(二)

上一篇,咱們初步瞭解了一下Mecanim的部分很基礎的類容,我以一個疑問的形式結尾。此次我來揭曉此問題的答案,其實很簡單,上次的警告以下:

警告的大概意思是:用在Animator Controller中的Animation clips須要有在檢視面板中被設置了Muscle(肌肉)的這個步驟。
個人英文很爛,但我能夠知道這句話的含義,就是咱們的用到的這個Animation Clip必須是已經產生了Avatar的模型中的Animation
Clip。因爲咱們當前只將第一個Robot生成了Avatar,因此如今咱們必須將每一個Robot都來一次Rigging,也就是讓每一個Robot的FBX文件中產生Avatar。這讓人以爲難以接受,但若是咱們的Robot的動畫導入方式是單個文件分割的方式的話就很簡單了。我後來想了想,如今咱們介紹一下Mecanim的核心功能->動畫重定向應該足夠合適了。那好吧!咱們開始吧!
首先咱們先進入AssetStore中下一個東西:Mecanim Animation Starter Pack(注意,AssetStore類裏面有不少免費的資源供咱們下載學習,但咱們得先註冊一個帳號)。


這個包但是一個偉大的包,咱們接下來的例子將會充分用到它。注意:AssetStore上下載的包的源文件並不在Unity的安裝目錄下,通常的地址爲:C:UsersAdministratorAppDataRoamingUnityAsset Store。爲了讓咱們更能理解Mecanim動畫系統的強大功能,咱們還得下載一個模型Soldier,固然,也是在AssetStore中:

注意,此Solider中是不帶任何動畫文件的,但Mecanim能夠經過動畫重定向來讓Solider動起來。下面咱們新建一個工程,取名爲:Mecanim2。而後將咱們下載好的兩個包都導進來。按照上一篇所講的,咱們先生成Solider的Avatar(上面這兩個包包含兩個FBX文件,一個是Solider,另外一個是swat)。而後新建一個AnimationController,名爲Solider1。
隨後咱們先看看咱們導入的那些帶有Avatar的動畫的FBX文件,以下:
咱們仍是新建兩個動畫狀態:idle***n。這回,咱們試着將那些個帶有Avatar的動畫片斷中尋找兩個有關idle***n的動畫片斷分別拖到兩個動畫狀態對應的Motion上,此次咱們發現能夠拖到個位置去了。果真印證了我在開篇提出的那個結論。
咱們接下來在兩個動畫狀態之間創建動畫轉換(Animation Transitions)。以下圖:

而後咱們單擊從idle***n狀態的那個箭頭。在Inspector面板上咱們看到了這個:

我用紅線標註了的這部分是咱們接下來進行狀態轉換的關鍵。這時咱們必須藉助於Animation Parameters了。新建一個名爲Speed的Float的Animation Parameters(上一篇我有介紹)。而後咱們在那個紅線標註的位置單擊下拉條,選中Speed,而後咱們發現這部分出現了一點點變化:

第二個下拉選項卡有兩個選擇項,分別爲:Greater與Less。我在第三個選項中填寫了0.1,這樣作的目的是:若是Speed大於0.1,執行此轉換,也就是動畫狀態從idle切換***n。這一點很重要,主要體如今咱們的腳本書寫上。
到此咱們的簡單的從idle***n的動畫控制器就作好了。咱們拖拽Solider到Scene視圖中,而後將咱們剛纔製做的Animation Controller多拽到Solider對應的Inspector面板中的Animator的指定的位置上,就像這:

注意:此Animator組件中的Apply Root Motion選項若是咱們勾選了的話,當播放動畫時是經過動畫運動的幅度來改變角色的Transform的,若是咱們不勾選,咱們就能夠用腳本設定此角色的Tranform。這樣說或許有點難以理解。放心吧,下面咱們會證實這一點的。
咱們仍是建一個平面來盛放Solider,而且爲Solider加一個角色控制器並適當調節一下膠囊體的大小和位置。
完成以後咱們運行一下試試,因爲此時咱們並無經過腳原本動態的控制Solider的動畫狀態的切換,因此Solider會播放默認的動畫:idle。截圖以下:
咱們看到這是Solider站立了一會,並且轉動了一個方向並擺了一個poss。咱們終於讓一個沒帶任何Animation Clips的角色動了起來。這就是Mecanim的強大的動畫重定向功能,他能將一個角色的動畫附加到另外一個角色身上,這是在之前版本的Unity中從沒出現過的。有了這種功能,美術就能夠極大地減輕工做量。可是咱們的好戲還沒完呢!咱們必須經過腳原本實現動畫狀體的切換。因而,咱們得新建一個腳本,取名爲:FirstMecanimScript。
我簡單的寫幾句代碼以下:
using UnityEngine;
using System.Collections;
 
public class FirstMecnimScript : MonoBehaviour {
 
    private Animator animator;
    private float v;
// Use this for initialization
void Start () {
        animator = gameObject.GetComponent();
 
}
 
// Update is called once per frame
void Update () {
               v = Input.GetAxis("Vertical");
        if(animator)
        {
            animator.SetFloat("Speed",v);
        
        }
}
}
代碼異常簡單,也就是說若是咱們按下豎直方向鍵時,當偏移量大於0.1(咱們定義的Speed的臨界點爲0.1)時,動化狀態立刻從idle轉換***n狀態:
功能確實達到了,可是還得注意一點,就是我以前強調的,若是在Animator中咱們勾選了Apply Root Motion,咱們沒必要修改角色的Transform,依靠角色的動做自己的設計就能改變角色的Transform。可是若是咱們沒有勾選它,那咱們就只能依靠程序來動態的改變其Transform,就像老式的動畫系統同樣。好了,這個問題讀者能夠親自去檢驗一下。此次咱們怎麼也體會到Mecanim的動畫重定向功能的強大了,可咱們尚未結束呢!接下來咱們還有IK,動畫混合樹等類容須要咱們去探尋。所以,個人下一篇文章,敬請期待!
相關文章
相關標籤/搜索