感謝作者加菲教主供稿。歡迎轉發分享,未經作者授權請勿轉載。如果您有任何獨到的見解或者發現也歡迎聯繫我們,一起探討。(QQ羣:793972859)
作者主頁:https://www.jianshu.com/u/56cdb766653,作者也是U Sparkle活動參與者,UWA歡迎更多開發朋友加入U Sparkle開發者計劃,這個舞臺有你更精彩!
概述
最近在試做一個射擊遊戲的人物動畫Demo,嘗試使用了部分Unity的人形動畫(Humanoid),以及 Playable Graph + Animation Job的功能。目前和美術同事配合,在Unity 2018.3.0f2中初步實現了空手移動和持槍瞄準的功能,在此做個小結。為簡單起見,不使用Root motion,使用原地動畫,並將動畫部分視為表現層,可以讀取邏輯層提供的數據,但是不寫入這些數據。
基本結構
1. 核心類
動畫控制器(AnimController)類:所有動畫代碼的驅動者。根據動畫圖資產、來構建動畫圖,並驅動動畫邏輯。將數據提供者、Transform綁定等傳入動畫圖實例。
動畫數據提供者(IAnimDataProvider)介面:動畫控制代碼通過這個介面,以key-value的形式來讀取業務邏輯設置的數據。具體的數據類可以實現這個介面,並將其交給AnimController來使用。
動畫圖資產(AnimGraphAsset)基類:從動畫圖中的節點抽象而成的可配置的模塊,運行時可以生成實例。這個做法來自(1)。
動畫圖實例(IAnimGraphInstance)介面:動畫圖資產的實例,最終由這些實例在運行時操作動畫圖。
節點綁定集合(TransformBindingCollection)類:將骨骼或其他節點通過鍵值方式存放,以便 AnimGraphAsset 只依賴節點的鍵就能在運行時獲取 Transform,而不需要依賴某個具體的 Transform 對象。
下面類圖簡單表示了這些類的關係: