日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】Unity Animator卡顿研究

發布時間:2025/3/18 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】Unity Animator卡顿研究 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【轉】Unity Animator卡頓研究

Unity Animator卡頓研究

發表于2017-07-26 ? ?點贊3??評論3? 分享 分享到 ?2.3k瀏覽

想免費獲取內部獨家PPT資料庫?觀看行業大牛直播?點擊加入騰訊游戲學院游戲程序行業精英群

711501594 | 導語?資源池化是游戲項目中最常見的一種優化方式,具體做法是當資源不需要使用時,不直接釋放而是回收到池中,等待下一次使用。對于unity游戲而言,回收的方式一般是SetActive,這么做已經回收的存量的資源就不會產生額外的消耗。但因為unity的一些“坑”,導致性能問題,我們需要換一種回收策略,也有了這篇Unity Animator卡頓研究。

在某一天,我們發現某個特效資源在使用時會有卡頓,通過Profile發現了下面這個坑

Animator組件在Enable時,需要重建內部數據,導致了異常的卡頓

對于這類問題,我們之前的做法是不用SetActive,而是使用SetLayer到不可見層來避免卡頓。但到底效率如何呢?為了避免同樣的事情發生,針對游戲中常見的幾個組件做了實驗,實驗的組件包括?Animator, Animation, ParticleSystem, MeshRenderer

(下面所有測試都在Meizu MX4 Pro上進行,Unity版本4.7.1)

我們在一個節點下創建了4個類型的gameobject,嵌套了一層同樣的子節點

每幀分別setActive和setLayer(遞歸子節點)100次 結果如下

可以看到結論是,Animator的開關耗時很大,應該盡量避免

接下來嘗試用setlayer解決

創建了50個英雄(用Animator的動作),用SetLayer的方式設置成Hide層(相機不渲染),CullingType是baseOnRender
Animator的Update平均有4-5ms的開銷

這種情況下設置成AlwaysAnimate,曲線變抖了很多,平均有6-7ms開銷

SetActive之后完全沒有Animator.Update了

嘗試去掉這個Update的消耗
試了幾種辦法:嘗試Speed=0沒有效果;嘗試設置成到手動控制模式(StartPlayback),動作能停止但Update的消耗還在。
經過幾次嘗試后發現可以設置Animator的enable,又做了下面的實驗:

首先測試Behaviour.Enable的性能

可以看到消耗比上面幾種情況都要小得多

接下來拿英雄做實驗
50個英雄SetActive=false的開銷還是很明顯的

SetLayer的效率高多了

Animator.Update的開銷還是很高


enable設置false之后Animator.Update沒了

切換開銷也較小

enable設置成true之后Animator.Update又回來了,切換開銷也很小



故此,終于找一個可以兩全的方法。

結論

對于Animator組件,應該盡量避免使用SetActive,改成SetLayer Behaviour.Enable=false的效率能好很多

建議: Unity的性能優化,實踐很重要。Unity引擎提供API使用很簡單也很給力,但內部的原理往往不得而知。為了減少使用API造成的不良影響,一方面可以通讀代碼,但更重要的是通過實踐和Profiler,總結出更好的做法。

posted on 2019-04-30 09:44 時空觀察者9號 閱讀(...) 評論(...) 編輯 收藏

總結

以上是生活随笔為你收集整理的【转】Unity Animator卡顿研究的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。