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)鍵元素: 下圖示意:一個(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】按鈕
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中以綠色顯示,否則以紅色顯示。
2.2.3 肌肉設(shè)定 1) Mecanim允許使用“肌肉”來控制不同骨骼的運(yùn)動(dòng)范圍。 詳細(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 Controller2.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 Controller1) 在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)如下:
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)畫有效。
|
|