小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Mecanim Animator使用詳解

 雪柳花明 2016-05-02

1. 簡介

    Mecanim把游戲中的角色設(shè)計(jì)提高到了一個(gè)新的層次,使用Mecanim可以通過Retargeting(重定向)來提高角色動(dòng)畫的重用性。在處理人類角色動(dòng)畫時(shí),用戶可以使用動(dòng)畫狀態(tài)機(jī)來處理動(dòng)畫之間的過渡及動(dòng)畫之間的邏輯。

   Mecanim支持運(yùn)動(dòng)重定向(Retargeting)功能:即把動(dòng)畫從一個(gè)角色模型應(yīng)用到另一個(gè)角色模型上的功能。

 2. Animator關(guān)鍵元素

2.1 Animator組件

     有Animator動(dòng)畫的Gameobject必須有Animator組件,Animation組件如下圖所示:

   

    Animator組件負(fù)責(zé)把動(dòng)畫分配給GameObject。Animator包含以下兩個(gè)關(guān)鍵元素:
    1) Animator Controller
    2) Avatar (僅當(dāng)GameObject是人形角色時(shí),才定義Avatar)

    下圖示意:一個(gè)游戲?qū)ο蟮腁nimator組件如何把Animation Clips、Animator Controller和Avatar資源組合在一起。


2.2 Avatar

    創(chuàng)建動(dòng)畫的一個(gè)基本步驟就是建立一個(gè)從Mecanim系統(tǒng)的簡化人形骨架結(jié)構(gòu)用戶實(shí)際提供的骨架結(jié)構(gòu)的映射,這種映射關(guān)系稱為Avatar。


2.2.1 創(chuàng)建Avatar   

      創(chuàng)建Avatar是使用Mecanim的關(guān)鍵步驟。Avatar的創(chuàng)建過程,就是分析導(dǎo)入的角色資源的骨骼結(jié)構(gòu),其內(nèi)部過程就是與Mecanim中已有的、簡化的、標(biāo)準(zhǔn)的人類骨骼進(jìn)行對比,最后將其轉(zhuǎn)換或標(biāo)識為Mecanim可以識別的骨骼結(jié)構(gòu)。

      通過Avatar的創(chuàng)建,可以實(shí)現(xiàn)角色之間的Retargeting。

      1)導(dǎo)入角色模型文件(如FBX)之后,在Project窗口中選中導(dǎo)入的角色,然后在其Inspector窗口中指定模型的的Rig為Humanoid,然后點(diǎn)【Apply】按鈕

         
   2)點(diǎn)【Apply】之后,Mecanim嘗試把角色已經(jīng)存在骨骼結(jié)構(gòu)匹配到Avatar的骨骼結(jié)構(gòu)(在大部分情況下,Mecanim能自動(dòng)完成),如果匹配成功,在【Configure】旁邊有一個(gè)“V”的符號,如下圖所示: 


   3)在成功匹配之后,Avatar子資產(chǎn)被增加到模型資產(chǎn)的下面,其在Project窗口中如下圖所示:


   4)選中Avatar子資產(chǎn)(如上圖中的EthanAvatar),Inspector窗口如下圖所示,點(diǎn)【Configure Avatar】之后,可配置Mapping和Muscles。


2.2.2 配置Avatar

      Avatar是Mecanim系統(tǒng)中極為重要的模塊,因此為模型資源正確地設(shè)置Avatar也就變得至關(guān)重要。不管Avatar的自動(dòng)創(chuàng)建是否成功,用戶都需要進(jìn)入到Configure Avatar界面中去確認(rèn)Avatar的有效性,即確認(rèn)用戶提供的骨骼結(jié)構(gòu)與Mecanim預(yù)定義的骨骼結(jié)構(gòu)已經(jīng)正確匹配起來,并且模型已經(jīng)處于T形姿態(tài)。

      1) 實(shí)線圓圈:骨骼是必須匹配的

      2) 虛線圓圈:骨骼是可選匹配的
      可選匹配骨骼的運(yùn)動(dòng)會(huì)根據(jù)必須匹配骨骼的狀態(tài)來自動(dòng)插值計(jì)算。為了方便Mecanim進(jìn)行骨骼匹配,用戶提供的骨架中應(yīng)包含所有必須匹配的骨骼。為了提高匹配的幾率,應(yīng)盡量通過骨骼代表的部位給骨骼命名(如:左手命名為LeftArm)。

      3) Avatar自動(dòng)創(chuàng)建成功,其界面如下:


      4) Avatar自動(dòng)創(chuàng)建失敗,其 界面如下:


     5) Avatar Configure Inspector (骨骼映射)



    6) 如果auto-mapping(Mapping->Automap)部分或完全失敗,可以在Scene中拖動(dòng)骨骼以進(jìn)行分配。如果Mecanim認(rèn)為骨骼合理,則在Avatar Inspector中以綠色顯示,否則以紅色顯示。


    7) 如果骨骼綁定正確,但是角色姿勢不對(不是標(biāo)準(zhǔn)的T形),在Scene中可看到消息“Character not in T-Pose”,解決此問題可通過Pose->Enforce T-Pose或旋轉(zhuǎn)其它的骨骼。

    

2.2.3 肌肉設(shè)定

       1) Mecanim允許使用“肌肉”來控制不同骨骼的運(yùn)動(dòng)范圍。
       2) 當(dāng)Avatar被創(chuàng)建且被成功配置之后,Mecanim可理解骨骼結(jié)構(gòu),且允許在Avatar Inspector的【Muscles】選項(xiàng)卡中調(diào)節(jié)相關(guān)參數(shù)。在此可以調(diào)整角色的運(yùn)動(dòng)范圍,以確保骨骼運(yùn)動(dòng)起來真實(shí)、自然。

           詳細(xì)使用方法參見:http://www./thread-1211-1-1.html

      3) 通過設(shè)置各個(gè)關(guān)節(jié)的旋轉(zhuǎn)范圍來控制不現(xiàn)骨骼的運(yùn)動(dòng)范圍。

 

2.3 Animator Controller

     負(fù)責(zé)定義使用哪些動(dòng)畫素材,以及何時(shí)、如何播放(融合<blend>和過渡<transition>)這些動(dòng)畫素材。

      Animator Controller以狀態(tài)機(jī)(State Machine)的方式維護(hù)一系列動(dòng)畫,且當(dāng)隸屬的角色發(fā)生特定事件時(shí),切換播放的動(dòng)畫。

2.3.1 創(chuàng)建Animator Controller

      在Project窗口中,創(chuàng)建Animator Controller,然后雙擊剛創(chuàng)建的Animator Controller可在Animator窗口中進(jìn)行編輯。創(chuàng)建Animator Controller如下圖所示:



2.3.2 編輯Animator Controller

2.3.2.1 創(chuàng)建狀態(tài)節(jié)點(diǎn)

         把Animation Clip從Project窗口中拖到Animator窗口,則自動(dòng)創(chuàng)建了一個(gè)對應(yīng)的狀態(tài)節(jié)點(diǎn),第一個(gè)拖入的Animation Clip為默認(rèn)狀態(tài)節(jié)點(diǎn),如下圖所示:



2.3.2.2 設(shè)置狀態(tài)變換

        狀態(tài)變換:即從一個(gè)狀態(tài)變換到另一個(gè)狀態(tài),如從IdleShort狀態(tài)變換到Jump狀態(tài)。

2.3.2.2.1 角色自動(dòng)運(yùn)動(dòng)

       簡單且不用編程的狀態(tài)變換,程序不能控制


        從一個(gè)狀態(tài)變換到另一個(gè)狀態(tài)的帶箭頭的線表示:這些箭頭線用于設(shè)置變換條件,如:在什么條件下才從IdleShort狀態(tài)變換到Jump狀態(tài)。

       設(shè)置狀態(tài)變換時(shí),先選中箭頭線,然后在Inspector中設(shè)置變換條件,如下圖根據(jù)播放的百分比來設(shè)置變換條件。


       當(dāng)IdleShort狀態(tài)播放到90%時(shí),則切換到Run狀態(tài)。

       設(shè)置完之后,關(guān)閉Animator窗口中。至此,一個(gè)簡單的且不用編程的Animator Controller已經(jīng)設(shè)置完成。

2.3.2.2.2 程序控制角色運(yùn)動(dòng)

       1. 創(chuàng)建混合樹

       1) 若一個(gè)狀態(tài)節(jié)點(diǎn)支持多種運(yùn)動(dòng)(如:Run支持RunDirect、RunLeft、RunRight),選中此節(jié)點(diǎn)點(diǎn)右鍵,然后點(diǎn)【Create new BlendTree in State】,則此狀態(tài)節(jié)點(diǎn)的Motion為:Blend Tree


      2) 創(chuàng)建BlendTree之后,雙擊此狀態(tài)節(jié)點(diǎn),則進(jìn)入混合樹的編輯。   

    3) 選中混合樹,在其Inspector面板中,點(diǎn)按鈕【+】然后點(diǎn)【Add Motion Field】增加3個(gè)Motion,然后并設(shè)置對應(yīng)的Motion,其結(jié)果如下:


       2. 創(chuàng)建控制參數(shù)并設(shè)置變換條件

       1) 創(chuàng)建控制參數(shù)

       

       2) 設(shè)置箭頭線變換條件

           首先選中箭頭線,然后設(shè)置此箭頭的變換條件。


      3) 設(shè)置混合樹變換條件

      

     Direction:

          -1: 播放動(dòng)畫RunLeft

           0: 揪放動(dòng)畫Run

           1:播放動(dòng)畫RunRight

     Blend Type: 1D(表示一個(gè)參數(shù)控制混合樹的動(dòng)畫播放) 

       

2.3.2.3 動(dòng)畫合成

     比如角色一邊跑,一邊揮劍,則需要把兩個(gè)動(dòng)畫進(jìn)行合成。要實(shí)現(xiàn)兩個(gè)動(dòng)畫的合成,需要單獨(dú)創(chuàng)建一個(gè)動(dòng)畫層。

    

   Weight:動(dòng)畫層的權(quán)重值

   Mask: 本層的動(dòng)作影響身體的哪一部分(遮罩)

   1) 創(chuàng)建Avatar Mask:在Project窗口中創(chuàng)建一個(gè)Avatar Mask

   2) 點(diǎn)擊不受影響的部位,使之變紅,如下圖只有右手的運(yùn)動(dòng)才參與計(jì)算,即只有右手的動(dòng)作才發(fā)生作用,從而達(dá)到屏蔽身體其它部位的目的,從而提高了效率(IK:表示把風(fēng)向動(dòng)力學(xué))

             

   3) 把Avatar Mask應(yīng)用于特定的動(dòng)畫層

   4) 在腳本中設(shè)置狀態(tài)變換條件,然后再把此腳本綁在角色身上。

   總結(jié):一個(gè)Animator Controller中可包含多個(gè)動(dòng)畫層,每個(gè)動(dòng)畫層按照其設(shè)定的狀態(tài)機(jī)單獨(dú)進(jìn)行運(yùn)行,然后根據(jù)其Weight把各動(dòng)畫層進(jìn)行合成,后面的動(dòng)畫層(除Base Layer)只顯示其Avatar Mask綠色的部分。   

2.3.3 應(yīng)用Animator Controller

        1) 在Hieratchy窗口中選擇需要Animator動(dòng)畫的角色         

        2) 把Project中的Animator Controller資源拖到角色對象的Animator組件的Controller輸入框,或點(diǎn)旁邊的按鈕進(jìn)行選擇

3. Animator重定向功能

        重定向功能:就是把應(yīng)用在一個(gè)角色上的動(dòng)作應(yīng)用到另一個(gè)角色身上。

         即同一個(gè)Animator Controller可用于不同的Animators。

4. Animator詳細(xì)參數(shù)

    Animator詳細(xì)參數(shù)參見:http://docs./ScriptReference/Animator.html

   http://edu.china./learning_document/getData?file=/Manual/MecanimAnimationSystem.html

5. 設(shè)置動(dòng)畫狀態(tài)過渡代碼

   設(shè)置動(dòng)畫狀態(tài)過渡代碼例子(IdleRunJump.cs)如下: 

[csharp] view plain copy
在CODE上查看代碼片派生到我的代碼片
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class IdleRunJump : MonoBehaviour {  
  5.   
  6.   
  7.     protected Animator animator;  
  8.     public float DirectionDampTime = .25f;  
  9.     public bool ApplyGravity = true;   
  10.   
  11.     // Use this for initialization  
  12.     void Start ()   
  13.     {  
  14.         animator = GetComponent<Animator>();  
  15.           
  16.         if(animator.layerCount >= 2)  
  17.             animator.SetLayerWeight(1, 1);  
  18.     }  
  19.           
  20.     // Update is called once per frame  
  21.     void Update ()   
  22.     {  
  23.   
  24.         if (animator)  
  25.         {  
  26.             AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);            
  27.   
  28.             if (stateInfo.IsName("Base Layer.Run"))  
  29.             {  
  30.                 if (Input.GetButton("Fire1")) animator.SetBool("Jump", true);                  
  31.                     }  
  32.             else  
  33.             {  
  34.                 animator.SetBool("Jump", false);                  
  35.                  }  
  36.   
  37.             if(Input.GetButtonDown("Fire2")&&animator.layerCount >= 2 )  
  38.             {  
  39.                 animator.SetBool("Hi", !animator.GetBool("Hi"));  
  40.             }  
  41.               
  42.           
  43.                 float h = Input.GetAxis("Horizontal");  
  44.                 float v = Input.GetAxis("Vertical");  
  45.             animator.SetFloat("Speed", h*h+v*v);  
  46.                     animator.SetFloat("Direction", h, DirectionDampTime, Time.deltaTime);     
  47.         }               
  48.     }  
  49. }  

6. 為Mecanim系統(tǒng)創(chuàng)建角色

    為Mecanim系統(tǒng)創(chuàng)建角色主要包括以下三個(gè)階段:

    1) 建模

         角色模型有合理的拓?fù)浣Y(jié)構(gòu);模型導(dǎo)出設(shè)置;模型導(dǎo)入U(xiǎn)nity3D;使角色處于T-Pose;去掉不需要的面、頂點(diǎn)及隱藏的面、頂點(diǎn);

    2) 骨骼設(shè)置

    3) 蒙皮

         把多邊形的網(wǎng)格頂點(diǎn)綁定到骨骼上的過程。

7. 肌肉設(shè)置與身體遮罩的區(qū)別

    1) 肌肉設(shè)置:是對Avatar進(jìn)行設(shè)置,所以它修改了Avatar的輸入設(shè)置,對所有動(dòng)畫有效。

    2) 身體遮罩:是對動(dòng)畫進(jìn)行設(shè)置(每個(gè)Animation Clip有一個(gè)Body Mask),只修改本動(dòng)畫的屬性,即只對本動(dòng)畫有效。

    







    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多