《Unity性能優(yōu)化》系列課程筆記——第拾叁節(jié)
2022年4月12日第拾叁講 動畫
Animation的一些細節(jié)
播放單個AnimationClip速度,Legacy Animation系統(tǒng)更快,因為老系統(tǒng)是直接采樣曲線并直接寫入對象Transform
針對動畫的縮放曲線比位移、旋轉(zhuǎn)曲線開銷更大
常數(shù)曲線不會每幀寫入場景,更高效
Animator的一些細節(jié)?
不要使用字符串來查詢Animator
使用曲線標記來處理動畫事件
使用Target Marching函數(shù)來協(xié)助處理動畫
將Animator的CullingMode設(shè)置成Based On Renderers來優(yōu)化動畫,并禁用SkinMesh Renderer的Update When Offscreen屬性來讓角色不可見時動畫不更新

Animator VS Animation?
Animation可以將任何對象屬性制作成Animation Clip, Animator是將Animaiton Clip組織到狀態(tài)機流程圖中使用
Animation與Animator播放動畫時的效率是有個臨界點的,這個臨界點是根據(jù)動畫曲線條數(shù)來的,當動畫曲線條數(shù)小于這個臨界點時Animation快,當動畫曲線條數(shù)大于這個臨界點時Animator快
當Cpu核數(shù)較少時,Animation播放動畫有優(yōu)勢,當Cpu核數(shù)較多時,Animator表現(xiàn)會更好
Animator Controller Graph中的所有動畫節(jié)點的Animation Clip都會載入到內(nèi)存中,當有海量動畫狀態(tài)機節(jié)點時,內(nèi)存開銷較大
Playable API VS Animator?
Playable API優(yōu)點
支持動態(tài)動畫混合,可為場景中的對象提供自己的動畫,并可以動態(tài)添加到PlayableGraph當中使用
允許創(chuàng)建播放單個動畫,而并不會產(chǎn)生創(chuàng)建和管理AnimatorController資源所涉及的開銷,可更加靈活的控制PlayableGraph的數(shù)據(jù)流,可以插入自定義的AimationJob。
可以控制動畫文件加載策略,按需加載、異步加載等
允許用戶動態(tài)創(chuàng)建混合圖,并直接逐幀控制混合權(quán)重(甚至可以混合AniationClip與AnimatorController動畫)
可以運行時動態(tài)創(chuàng)建,根據(jù)條件添加可播放節(jié)點。而不需要提前提供一套PlayableGraph運行時啟動和禁用節(jié)點,可以做到自由度更高的override機制
可加載自定義配置數(shù)據(jù),更加方便的和其他游戲系統(tǒng)整合
Playable API缺點
沒有直接使用Animator直觀
混合模式?jīng)]有現(xiàn)成的,需要自己實現(xiàn)
需要開發(fā)更多的配套工具
有一定學(xué)習(xí)成本
解決方案選擇?
一些簡單、少量曲線動畫可以使用Animation或動畫區(qū)間庫如Dotween\iTween等完成,如UI動畫,Transform動畫等。
角色骨骼蒙皮動畫如果骨骼較少,Animation Clip資源不多,對動畫混合表現(xiàn)要求不高的項目可以采用Legacy Animation。注意控制總體曲線數(shù)量
一些角色動畫要求與邏輯有較高的交互、并且動畫資源不多的項目可以直接用Animator Graph完成
一些動作游戲,對動畫混合要求較高、有一些高級動畫效果要求、動畫資源量龐大的項目,建議采用Animator+Playable API擴展Timeline的方式完成。