Unity-動(dòng)畫性能和優(yōu)化
本頁面提供一些提示來幫助您在 Unity 中獲得最佳性能,內(nèi)容涵蓋動(dòng)畫系統(tǒng)和運(yùn)行時(shí)優(yōu)化。
注意:有關(guān)在 3d 應(yīng)用程序中為角色建模以便在 Unity 中獲得最佳性能的技巧,請參閱角色建模的性能優(yōu)化。
動(dòng)畫系統(tǒng)
控制器
未設(shè)置控制器的?Animator?不會(huì)花時(shí)間執(zhí)行處理。
簡單動(dòng)畫
播放沒有混合的單個(gè)動(dòng)畫剪輯會(huì)使 Unity 的速度比舊版動(dòng)畫系統(tǒng)更慢。舊系統(tǒng)非常直接,對曲線采樣并直接寫入變換中。Unity 的當(dāng)前動(dòng)畫系統(tǒng)具有用于混合的臨時(shí)緩沖區(qū),并會(huì)對采樣曲線和其他數(shù)據(jù)進(jìn)行額外復(fù)制。當(dāng)前系統(tǒng)布局已針對動(dòng)畫混合和更復(fù)雜設(shè)置進(jìn)行優(yōu)化。
縮放曲線
動(dòng)畫化縮放曲線比動(dòng)畫化移動(dòng)和旋轉(zhuǎn)曲線的成本更高。為了改善性能,請避免使用縮放動(dòng)畫。
注意:這不適用于常量曲線(具有相同動(dòng)畫剪輯長度值的曲線)。常量曲線經(jīng)過優(yōu)化,成本低于比普通曲線。常量曲線的值與默認(rèn)場景值相同時(shí),常量曲線不會(huì)每幀都寫入場景。
層
大多數(shù)時(shí)間,Unity 都在估算動(dòng)畫,并將動(dòng)畫層和動(dòng)畫狀態(tài)機(jī)的開銷保持在最低水平。向 Animator 添加另一層(無論同步與否)的成本取決于層播放的動(dòng)畫和混合樹。層的權(quán)重為零時(shí),Unity 會(huì)跳過層更新。
人形動(dòng)畫類型與通用動(dòng)畫類型
以下提示可幫助您選擇具體類型:
導(dǎo)入人形動(dòng)畫時(shí),如果不需要 IK(反向動(dòng)力學(xué))目標(biāo)或手指動(dòng)畫,請使用?Avatar 遮罩?將它們移除。
使用通用類型時(shí),使用根運(yùn)動(dòng)比不使用根運(yùn)動(dòng)的成本更高。如果動(dòng)畫沒有使用根運(yùn)動(dòng),請確保未指定根骨骼。
場景級別優(yōu)化
可進(jìn)行許多優(yōu)化,一些有用的提示如下:
使用哈希而不是字符串來查詢 Animator。
實(shí)現(xiàn)一個(gè)小的 AI 層來控制 Animator。您可以讓它為 OnStateChange、OnTransitionBegin 和其他事件提供簡單回調(diào)。
使用狀態(tài)標(biāo)記可輕松地將 AI 狀態(tài)機(jī)與 Unity 狀態(tài)機(jī)匹配。
使用其他曲線來模擬事件。
使用其他曲線來標(biāo)記動(dòng)畫;例如,與目標(biāo)匹配一起使用。
運(yùn)行時(shí)優(yōu)化
可見性和更新
始終通過將 Animator 的?Culling Mode?設(shè)置為?Based on Renderers?來優(yōu)化動(dòng)畫,并禁用蒙皮網(wǎng)格渲染器的?Update When Offscreen?屬性。這樣即可在角色不可見時(shí)讓 Unity 不必更新動(dòng)畫。