天天看點

# Unity3d Mecanim動畫如何應用3dmax中的動畫位移Unity3d Mecanim動畫如何應用3dmax中的動畫位移

Unity3d Mecanim動畫如何應用3dmax中的動畫位移

大家好!我是小周,這是我的第一篇部落格,自己喜歡遊戲,是以大學報了計算機專業,畢業以後也如願以償的進入了遊戲開發者的隊列,現在用Unity3d做MMORPG遊戲快一年了,嘗試着分享一下自己的經驗。

每博加油:不計成本地努力!

程式動畫流程

遊戲當中角色動畫前後制作過程:2D形象設計圖->3D模型制作->為模型搭建骨骼制作動畫->導出FBX->導入FBX->程式控制動畫展現(主要講述 3dmax 到 unity3d的過程)。

為了達到應用3dmax中的動畫位移的目的,在上訴環節應該注意的一些地方,如果沒有注意到,則多半需要返工啦,經驗就是這麼被實踐出來的。。。

3D模型制作注意事項

在3dmax中制作好模型以後,一定要記得用ResetXform重置一下,否則在後續環節中很大可能會出錯(比如大小比例、旋轉不對等等),至于重置的作用,這裡就不多講了,可以百度一下ResetXform。

骨骼搭建和制作動畫注意事項

如果要應用3dmax中的動畫位移作為程式位移,則unity3d不支援3dmax中的虛拟體和限制關系,是以在搭建骨骼的時候不要使用虛拟體和限制關系。

為了應用3dmax動畫中的位移,則需要一個根“根骨骼”,來用做程式中的Root Node。“根骨骼”起着至關重要的作用,在講“根骨骼”之前,先來講講這兩種軟體的參考坐标系。

也許你會問參考坐标系有什麼好講的,我也認為沒什麼好講的,但是兩種軟體的參考坐标系不一樣,如果不注意這點,可能會帶來一些不必要的麻煩。

在unity3d中是左手坐标系(Y軸朝上、Z軸朝前、X軸向右)、而在3dmax中是右手坐标系(Z軸朝上、Y軸朝前、X軸向右),而且不同的軸向分量在導出導入後對應關系也不一樣,下面是自己試驗得出的對應關系:

3dmax.z = unity3d.y

3dmax.x = -unity3d.x

3dmax.y = -unity3d.z

( - 為負号)

如果沒考慮到對應關系,直接在3dmax做一個向前運動的動畫(即向着3dmax的Y軸正向移動),在導入到unity3d以後就不是向前移動,按照上面的對應關系則是向後移動,是以要在unity3d中得到正确的結果,則在3dmax中制作動畫時應該把Y軸負方向做為向前移動的方向,把X軸負方向作為向右移動的方向,豎直軸還是Z軸。

回過頭來講“根骨骼”,為了滿足上訴移動方向的需求,則搭建骨骼的時候模型朝向Y軸負方向,“根骨骼”也應是朝向Y軸負方向,後續搭建的骨骼,都必須是“根骨骼”的子節點,“根骨骼”的位置是模型中心位置在水準面XY上的投映點,動作有标準起始動作,這一幀的“根骨骼”應該在世界坐标的原點,由于導出導入、坐标系對應關系和unity3d參數設定的原因,“根骨骼”在動畫制作過程中,不能有旋轉,而且隻能在Y軸上運動,大緻保持着模型中心映射到水準面XY上的位置(根據程式導入後的效果有微調)。

3dmax導出注意事項

做好以後,可以整體導出,也可以分段導出多個,格式為FBX。

導出要注意機關,一般為米,一個項目應該有統一的标準。

由于上述的參考坐标系的不同,在導出要設定“Y-up”(Advanced Options—>Axis Conversion中),unity3d是Y軸向上。

3dmax2011是比較穩定的版本,但是導出的FBX會比2014等高版本導出的資源大小更大,是以在保證效果的前提的下,可把做好的動作用高版本的3dmax導出,這樣會減少不少的資源量。

導入unity3d注意事項

FBX導入unity3d以後,參數的設定:

在Model面闆中,Scale Factor 大小比例,根據項目實際情況而定,一個項目應該有統一的标準,Import BlendShapes一般用于做面部精細的表情,是以一般不勾選。

在Rig面闆中,Animation Type選擇Generic(Mecanim在Humanoid的基礎上增強了對Bone的骨骼支援),Root Node則選擇上述的“根骨骼”。如果是多個FBX檔案,設定好了一條标準骨骼,則Copy From Other Avatar即可。

在Animations面闆中,Anim.Compression一般不需要,選擇Off,因為動作已經做得比較完善了,如果選擇了其他,會二次調整動畫的表現,增加一些微調,與預期效果不一樣。Clips中分割好每一個動作,這裡需要注意的是每一個片段的開頭都必須是标準動作(如果是連擊動作去接上一擊的動作除外),“根骨骼”在世界坐标原點(即便是連擊動作,要進行這樣的分段,則在每段開始時,在制作時“根骨骼”也要托回到世界坐标原點,在繼續移動)。然後設定每一段動畫的參數,要應用3dmax動畫中的位移則設定參數如下圖:

# Unity3d Mecanim動畫如何應用3dmax中的動畫位移Unity3d Mecanim動畫如何應用3dmax中的動畫位移

程式應用3dmax動畫位移作為程式位移

最後就是在程式中實作,執行個體一個對應FBX模型對象,然後加上Animator元件(一般會自動加上),建立一個Animaotr Controller将上述分好的卡通片段引入,Avatar用對應FBX統一用的标準骨骼。控制播放哪段動畫,這裡就不細講了,可以上網搜尋Mecanim動畫系統。

這裡講一下注意事項:

1.要應用動畫中的位移作為程式位移,Animator元件上有一個總開關Apply Root Motion,如果要應用,則需勾選。

2.如果對象上還存在Rigidbody剛體元件,則Constraints中Freeze Position中的 X 與 Z 不能勾選,若果勾選了,即是鎖定水準上的移動,應用動畫位移就展現不出來。

上述經驗可能不全面,如果遇到新的問題,可以一起讨論讨論,如果錯誤,還望指正,回複或者聯系我的QQ489289839都可以,感謝大家閱讀我的部落格。

繼續閱讀