當前位置:首頁 >教程首頁 > 遊戲程序 > Unity3D遊戲開發工程師班 >Unity動畫係統設計介紹(上)

Unity動畫係統設計介紹(上)

發布時間:2021-04-28 09:48:27

Hello,大家好,今天給大家分享一篇幹貨,Unity動畫係統設計介紹(上),感興趣的朋友可以一起來看下!

這兩年和幾個朋友一起討論Unity動畫係統,包括折騰了幾次相關的組內分享,總結出很多內容。主要是關於設計和對象方麵,陳列一下。

一、動畫係統

1、簡介

Unity現存兩套動畫係統:Legacy動畫係統和Mecanim動畫係統。Legacy動畫係統功能相對簡單,核心組件Animation;Mecanim動畫係統是Unity當前主要的動畫係統,在Legacy動畫係統上增加很多新的概念,功能相對複雜,核心組件Animator。

2、動畫曲線(AnimationCurve)

Unity中的AnimationCurve是一根二維曲線,在動畫文件中曲線根據作用被分成了不同類型類型,具體分類可用下圖表示:

不同類型BindCurve在Animation窗口內有不同的圖標,圖標由Curve綁定的組件來決定,Curve前顯示的圖標表示其控製的內容歸屬組件,其中最需要關注的是TransformCurve和MuscleCurve,前者圖標是Transform的圖標,後者圖標是Animator的圖標,屬於Mecanim機製的Generic和Humanoid動畫片在運行時是不會保留原始動畫曲線數據的(在編輯器下會)。

所以運行期不能在Legacy機製下采樣播放(但編輯器下可以),RootMotionCurve是程序內部生成的對象,它的特殊之處在於儲存的值是相對整個模型空間的變換,而不是相對父節點的局部變換。

0.png

二、動畫資產

1、資產的導入

Unity會對支持的文件執行導入流程,實際在引擎中出現的文件是導入流程生成的Unity對象。Unity導入模型和動畫文件之後提供了很多的設置,導入設置麵板中Rig和Animation選項頁大部分都與動畫相關。

最重要的選項是Rig/Animation Type,除無動畫的None以外有三個選項,分別代表:

Legacy – 模型和動畫數據都會被處理為Legacy係統的動畫數據;

Generic – 模型和動畫數據都會被處理為Mecanim係統的非人形動畫數據,需要配置或者自動為模型資產創建對應的Avatar實例;

Humanoid – 模型和動畫數據都會被處理為Mecanim係統的人形動畫數據,需要配置或者自動生成模型骨骼創建Avatar實例和Human實例。

2、動畫片段(AnimationClip)

動畫片段是AnimationClip類型的對象,.anim資產文件,是Unity中動畫數據的存在形式,AnimationClip數據實際上就是以綁定對象為索引的AnimationCurve數據集合。

所有的動畫Fbx文件導入後都是生成AnimationClip類型的對象,隻是資源管理器裏的文件後綴名並不是.anim,且在引擎內禁止修改。導入的動畫片段拷貝副本後,可以進行曲線修改和刪除,導入DCC文件會根據關鍵幀擬合得到動畫曲線,Unity有三種曲線擬合方式,埃爾米特曲線擬合、線性擬合和離散值。

默認情況下都是埃爾米特曲線擬合,也就是根據關鍵幀擬合出三次曲線,但如果導入動畫資產時開啟了動畫壓縮,則根據誤差設置,Unity會自動在誤差允許內使用線性擬合乃至保留離散的關鍵幀。

Unity不會在導入流程中使用離散值擬合,所以DCC軟件裏做的數值離散動畫在Unity內播放會出現不合理的插值幀。

1.webp.jpg

3、動畫的控製器

Mecanim的動畫播放控製是由有限狀態機和動畫層級來完成,由Animator Controller做有限狀態機層級的容器,Animator需要指定Animator Controller;

Animator Controller隻能在編輯環境配置,運行期不可改,Animator Controller可以設置黑板參數(邏輯容器),可以在腳本中獲取,也可以作為轉移條件;如果黑板參數名字與播放的Custom Curve相同,則伴隨動畫播放動態修改。

Animator Controller核心概念就是Layer,State和Transition,就是層級,狀態,轉移,一個狀態可以是播放一個動畫片段的節點、一個子狀態機或者混合樹,Layer之間可以進行動畫覆蓋與附加,輸出可以使用Avatar Mask進行剔除。

Sync選項可以讓多個層級使用一個狀態機,但是每個狀態上可以播放不同的動畫,Mecanim的IK也是以層級為單位。

State可以進行一些播放狀態的設置,Mecanim的動畫混合是使用BlendTree完成的,BlendTree可以作為一種State存在,Unity的BlendTree沒有什麼特殊設置。

Foot IK選項不意味著開啟足部IK,而是啟用足部IK相關的一些前處理,主要有兩個:啟用Human設置中的Feet Spacing,確保雙足骨骼在Z軸上差距2倍Feet Spacing;根據Root Motion得到的速度進一步修正雙足骨骼的位置。

Transition控製State之間的轉移,主要依賴條件有兩個,退出時間Exit Time以及參數條件Condition,兩者均滿足才會發生轉移,轉移有Solo和Mute標簽,前者表示優先轉移,後者表示禁用。

Animator Controller的動畫融合是在轉移的時候完成的;

可以在編輯器裏配置轉移打斷相關的設置。

2.png

4、Avatar

Avatar文件是Mecanim方案裏負責記錄模型骨骼層級結構相關的數據合集,也會儲存重定向方案相關的數據;

DCC文件導入時會生成或者依賴一個確定的Avatar文件完成動畫數據的導入流程;

Animator組件可以通過指定Avatar文件完成骨骼層級結構的初始化,但也可以通過配合動畫控製器查詢當前模型子節點獲取,所以Avatar文件並不是必須的。

來源:知乎

作者:Yene

华体会hth体育网 賞析
  • 2101期學員李思庭作品

    2101期學員李思庭作品

  • 2104期學員林雪茹作品

    2104期學員林雪茹作品

  • 2107期學員趙淩作品

    2107期學員趙淩作品

  • 2107期學員趙燃作品

    2107期學員趙燃作品

  • 2106期學員徐正浩作品

    2106期學員徐正浩作品

  • 2106期學員弓莉作品

    2106期學員弓莉作品

  • 2105期學員白羽新作品

    2105期學員白羽新作品

  • 2107期學員王佳蕊作品

    2107期學員王佳蕊作品

專業問題谘詢

你擔心的問題,火星幫你解答

微信掃碼入群領福利

掃碼領福利最新AI資訊

點擊谘詢
添加老師微信,馬上領取免費課程資源

1. 打開微信掃一掃,掃描左側二維碼

2. 添加老師微信,馬上領取免費課程資源

×

同學您好!

您已成功報名0元試學活動,老師會在第一時間與您取得聯係,請保持電話暢通!
確定