【Unity遊戲開發】性能優化之在真機上開啓DeepProfile與踩坑

1、引子

  最近馬三入職了新公司,平時除了負責編輯器開發以外還要作一些遊戲性能優化方面的工做。在這裏首先給你們安利一下Unity官方的性能測試分析工具URP ,這個工具目前是免費,測試的過程當中也不須要接入任何SDK,測試完成之後還能夠生成一份性能測試報告。固然,相比侑虎科技的UWA GOT工具來說,目前UPR功能仍是比較少的,不過在項目初期徹底能夠先使用UPR作一些性能優化工做。好了言歸正傳,咱們今天說說如何在真機上開啓DeepProfile模式以及一些坑。html

2、在真機上開啓DeepProfile

  衆所周知,使用Unity Profiler開啓DeepProfile模式之後,能夠看到不少函數的具體消耗和GC狀況,包括調用棧這些信息,有了這些信息再對症下藥的話優化的效果是很明顯的。可是在Editor下開啓DeepProfile模式採集到的的數據一般是不許確的,通常咱們要在真機上開啓DeepProfile模式採集數據。android

  首先要確保咱們本地已經有了 adb 工具,通常在下載AndroidStudio或者Android SDK的時候,這個東西已經包含了,相對路徑在:AndroidSDK/platform-tools/ 目錄下,將它配置到環境變量之後就能夠直接在命令行執行 adb 命令了。若是尚未搭建Android環境的話能夠到這裏下載:https://www.androiddevtools.cn/  若是感受搭建環境比較麻煩的話,也能夠直接下載一個簡單的adb工具,傳送門頁面也有單獨的 adb 工具下載,才2MB很輕便。shell

  而後將咱們的手機開啓開發者模式、開啓容許adb調試與安裝程序,以後再用數據線與電腦鏈接,而後執行下面的命令查看手機是否與電腦鏈接成功:性能優化

adb devices

  若是成功的話能夠看到咱們的手機設備了,以下圖所示,VBJ4C18423012974就是個人手機:微信

  

 

   有的時候鏈接adb會鏈接不上,咱們能夠重啓adb server試試:tcp

adb kill-server  #關閉 adb server
adb start-server  #開發adb server
adb devices  #查看鏈接成功的設備

  接着咱們還須要對Unity打包設置作一些調整:編輯器

  • 配置BuildPlayerSetting,勾選Development Build,這個是必選,不然沒法開啓調試。另外AutoConnectProfiler這個也須要勾選。而後就正常打包並安裝到Android手機上
  • 安裝好之後不要手動打開遊戲,要經過命令行啓動咱們的遊戲。具體命令是:
    adb shell am start -n com.xxx.xxx/com.unity3d.player.UnityPlayerActivity -e 'unity' '-deepprofiling'

    「/」前面的是你本身項目的包名,「/」後面的表明的是具體的啓動Activity的名稱,若是你的項目沒有改動,使用的是默認的Activity的話,那麼直接使用「com.unity3d.player.UnityPlayerActivity」,若是有在AndroidManifest中修改過啓動的Activity的話,要換成本身的Activity才能夠,好比:「com.msxher.MainActivity」這種函數

  • 經過命令行拉起遊戲之後,還須要將手機鏈接到Unity的指定端口上面,這樣Profiler才能接收到數據,具體命令是:
    adb forward tcp:55000 localabstract:Unity-com.xxx.xxx

    "Unity-"後面跟着你的包名就能夠了,若是55000端口很差使的話能夠試試4600、34999等端口工具

  • 此時咱們打開Unity中的Profiler窗口,而後選擇<Enter IP>這個選項,在裏面輸入 127.0.0.1 ,若是沒有出錯的話,就能夠鏈接上咱們的手機了,而且能夠在窗口中看到各項的數據了。注意不要輸入端口號,直接輸入 127.0.0.1 這個IP就能夠。

  有幾個注意事項:性能

  • 'unity'和'-deepprofiling'之間要有空格
  • 遊戲要讓命令來啓動,不要本身啓動,不然會有一個警告,說此Activity已經存在
  • 生成APK的Unity版本與用來開啓Profiler的Unity版本必須是同一個
  • 若是本身已經手動啓動了unity,則須要使用命令行從新拉起一遍遊戲

  按理說若是沒有問題的話,此時就能夠進行DeepProfile了咱們的遊戲了,網上不少教程也寫到這裏就結束了。可是馬三在實際操做的過程當中,重複試了不少遍,包括重啓Unity、從新打包、從新安裝手機包等一系列的操做,都是不能在Android上開啓DeepProfile模式。馬三甚至一度覺得是由於DeepProfile模式比較消耗性能,所以Unity在移動平臺上禁用了它。直到後來馬三把相關的官方文檔從頭至尾認認真真讀了一遍,才發現問題所在,下面就說說這個坑。

3、踩坑

    馬三通過閱讀官方文檔,發現只有在Mono的包上面才能開啓deepProfile,而咱們的包一直是使用il2cpp的方式進行打包的,所以不管怎樣嘗試都是不能開啓DeepProfile的。後來打了一個Mono的包,果真就能夠開啓DeepProfile了,各類函數消耗和GC看得清清楚楚。相關官方文檔的傳送門,建議你們有時間的話仔細閱讀一下。

  

 

 

 

4、總結

  在本篇博客中,馬三跟你們一塊兒學習瞭如何在真機上開啓Unity Profiler的DeepProfile模式,而且踩了坑:「只有在以Mono的方式打包的apk上才能開啓DeepProfile」,在il2cpp包上是不能開啓DeepProfile的。看來遇到問題仍是要多多閱讀官方文檔,畢竟官方文檔是最權威、最一手的資料。

 

 

 

 

若是以爲本篇博客對您有幫助,能夠掃碼小小地鼓勵下馬三,馬三會寫出更多的好文章,支持微信和支付寶喲!

       

 

做者:馬三小夥兒
出處:http://www.javashuo.com/article/p-tzdshanz-bw.html 請尊重別人的勞動成果,讓分享成爲一種美德,歡迎轉載。另外,文章在表述和代碼方面若有不妥之處,歡迎批評指正。留下你的腳印,歡迎評論!

相關文章
相關標籤/搜索