https://mp.weixin.qq.com/s?__biz=MzU5MjQ1NTEwOA==&mid=2247490321&idx=1&sn=f9f34407ee5c5d0d1edb478981299108&chksm=fe1e2fbac969a6acee4eddb865d161fe09400c9147794c777ea4087e59f1e5fc3ccca5d1d0dd&scene=21#wechat_redirect性能優化
在10月26日的Unity獨立遊戲日上,Unity大中華區技術總監張黎明爲你們分享了Unity技術支持團隊在性能優化方面的經驗。其中主要介紹了Unity如何提供性能優化服務,性能優化服務的流程,以及優化過程當中的注意事項。下面咱們來看一下具體的內容。函數
Project Review工具
Project Review是Unity全球企業級支持服務的一部分。Project Review會針對一個項目作全面而深刻的分析,從而幫助開發團隊找到項目在資源使用、運行時性能等方面的問題,並給出一套完整的解決方案或詳細修改意見。
整個Project Review是由Unity官方企業支持團隊入駐項目現場,進行爲期兩天的現場工做。內容通常包括:性能
遊戲啓動時間分析測試
場景、資源加載時間分析優化
遊戲過程當中GPU&CPU性能分析動畫
內存使用狀況分析插件
Asset Bundle和序列化分析調試
Il2cpp、代碼剪裁和binary大小優化對象
Asset審查自動化
UGUI性能分析
下面咱們會介紹一下Project Review中的主要內容,其中包括資源導入設置檢查,以及使用到的性能分析工具介紹。
資源導入設置檢查
Project Review開始階段,Unity技術支持工程師通常會先同開發團隊溝通整個項目的狀況,瞭解目前已知的性能問題,而後開始進入資源導入設置檢查環節。最多見的檢查項包括如下內容。
模型導入設置
檢查Read/Write Enabled是否開啓
開啓Read/Write Enabled通常是用於運行時修改Mesh的頂點數據,開啓這個選項會致使Mesh的內存佔用翻倍。所以若是項目中不須要在運行時修改這些Mesh數據的話,咱們建議把這個選項關閉。
檢查Animation Type有沒有設置成None
Unity默認的Animation Type是Generic,對包含動畫數據的FBX文件是適用這個選項的。可是若是FBX文件中沒有包含動畫數據,而只是普通靜態Mesh的話,設置爲Generic會致使引擎自動爲這個Mesh的GameObject添加一個Animator組件,致使沒必要要的消耗。所以對於不包含動畫數據的模型文件,咱們建議把這個選項設置爲None。
紋理導入設置
檢查Generate Mipmaps選項有沒有開啓
對3D物體,關閉Mipmap會致使遠處的紋理有閃爍感,並且渲染性能較低,所以建議開啓3D物體上紋理的Mipmap。開啓Mipmap的缺點是會致使紋理的內存佔用更大。對2D物體,Mipmap並不會致使閃爍和性能問題,因此建議關閉2D以及UI紋理上的Mipmap選項。
音頻導入設置
音頻壓縮格式
對iOS平臺,建議採用mp3格式壓縮音頻文件,安卓平臺建議使用Vorbis格式,由於這兩種格式分別在這兩個平臺上有硬件解碼的支持。
Force to Mono
手機遊戲每每對聲音質量要求不高,若是不須要立體聲效果,能夠把這個選項打開,將音頻文件導入爲單聲道音頻。
動畫導入設置
動畫幀率
在Animation頁面檢查動畫的幀率,通常30FPS足夠知足大部分遊戲的效果,若是發現有製做成60FPS的,建議美術從新制做成30FPS。
Project Review經常使用性能分析工具
Project Review最主要的工做是使用各類工具來分析項目中存在的性能問題,最長用的工具包括Unity Profiler,Unity Memory Profiler, XCode Instrument. XCode Instrument內又包含了不少工具,其中最經常使用的有Time Profiler,Allocation以及Capture GPU Frame。
Unity Profiler
Unity Profiler中最常檢查的內容是CPU Usage,其中GC Alloc和Time ms最爲重要。GC Alloc展現了每幀在Mono堆上進行內存分配的代碼,過於頻繁的在堆上分配內存會致使Mono按期觸發GC.Collect操做,進而致使遊戲卡頓。所以咱們建議對單幀2K以上的內存分配,以及每幀20B以上的內存分配進行排查。若是能把堆內存的分配降到最低是最好的。Time ms展現了每一幀CPU耗時最高的函數,經過這項能夠找到耗時不合理的代碼,而後進一步對代碼進行優化。
Unity Memory Profiler
Unity爲5.3以上的版本提供了一個新的Memory Profiler工具,這個工具目前仍是之外部插件方式提供的。這個工具經過圖形的方式展現了工程中佔用內存最高的資源類型,所以能夠很方便的進行資源內存的優化。另外還能夠在遊戲的不一樣時間點抓取多個快照,經過比較內存佔用的不一樣,來發現某些資源內存泄漏的狀況。
XCode Instrument – Time Profiler
左上角是Instrument的Time Profiler工具,右下角是Unity Profiler,能夠發現它們很是想像。區別在於Time Profiler能夠分析一段時間範圍內不一樣函數的時間消耗,而Unity Profiler只能分析一幀內代碼的時間消耗。另外Time Profiler能夠顯示引擎底層耗時高的代碼堆棧,很是方便從底層去理解性能問題的緣由。Unity Profiler只能顯示引擎代碼中添加標籤的函數耗時,所以每每在Instrument Time Profiler中能夠看到更多有用的數據。
XCode Instrument – Allocation
Allocation是用於分析內存分配的工具。默認狀況下,它會開啓Created & Persistent選項,這表明它會記錄一段時間內分配出來可是沒有釋放的內存。由於有了這個功能,咱們能夠很方便的檢查遊戲中存在的內存泄露。通常的使用方法是在遊戲主菜單界面開啓Allocation檢測,進入戰鬥場景測試一段時間再回到主菜單界面,而後檢查有哪些內存分配可是沒有被釋放。這部份內存就可能包含存在泄漏的內存。
Capture GPU Frame
從XCode內啓動遊戲在真機運行,經過XCode內的Capture按鈕能夠抓取當前渲染幀的所有數據。界面左邊展現了全部的Drawcall列表,中間上方是當前Drawcall渲染出的畫面,下方是當前Drawcall的相關數據,右上方是當前Drawcall用到的紋理數據。這個工具能夠顯示每一個Drawcall的耗時,所以能夠用來檢查哪些對象渲染耗時過高。進而分析是Shader緣由,仍是網格體太複雜等等。
其餘
在安卓平臺下並無XCode中這麼全面的性能分析工具。最經常使用的工具備Adreno Profiler和Mali Graphics Debugger,這兩個工具都是用來進行GPU性能分析的。
Unity企業支持服務
最後給你們簡單介紹一下Unity爲中國開發者提供的企業支持服務內容。
首先咱們會爲每一個企業客戶開啓Zendesk帳號,Zendesk是Unity面向企業客戶提供的問題解答平臺。這個平臺能夠跟蹤開發者提交的每一個問題,而且維護每一個問題的當前狀態,方便Unity官方確保每一個問題獲得及時的解決。
另外咱們爲每一個企業客戶提供了專屬的企業支持經理,全程跟蹤企業遇到的技術問題,而且以最快的速度響應出現的問題。
針對國內客戶廣泛存在研發進度很是緊迫的狀況,咱們提供了每週兩天的現場支持,能夠在現場提供性能優化、培訓、問題解答、現場代碼調試等服務。
結語
今天就爲你們分享到這裏。後面咱們還將繼續爲你們分享更多遊戲性能優化相關技巧和內容在Unity官方中文社區(unitychina.cn),請保持關注。