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


一、引子

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

二、在真機上開啟DeepProfile

  眾所周知,使用Unity Profiler開啟DeepProfile模式以后,可以看到很多函數的具體消耗和GC情況,包括調用棧這些信息,有了這些信息再對症下葯的話優化的效果是很明顯的。但是在Editor下開啟DeepProfile模式采集到的的數據通常是不准確的,一般我們要在真機上開啟DeepProfile模式采集數據。

  首先要確保我們本地已經有了 adb 工具,一般在下載AndroidStudio或者Android SDK的時候,這個東西已經包含了,相對路徑在:AndroidSDK/platform-tools/ 目錄下,將它配置到環境變量以后就可以直接在命令行執行 adb 命令了。如果還沒有搭建Android環境的話可以到這里下載:https://www.androiddevtools.cn/  如果感覺搭建環境比較麻煩的話,也可以直接下載一個簡單的adb工具,傳送門頁面也有單獨的 adb 工具下載,才2MB很輕便。

  然后將我們的手機開啟開發者模式、開啟允許adb調試與安裝程序,之后再用數據線與電腦連接,然后執行下面的命令查看手機是否與電腦連接成功:

adb devices

  如果成功的話可以看到我們的手機設備了,如下圖所示,VBJ4C18423012974就是我的手機:

  

 

   有的時候連接adb會連接不上,我們可以重啟adb server試試:

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在移動平台上禁用了它。直到后來馬三把相關的官方文檔從頭到尾認認真真讀了一遍,才發現問題所在,下面就說說這個坑。

三、踩坑

    馬三經過閱讀官方文檔,發現只有在Mono的包上面才能開啟deepProfile,而我們的包一直是使用il2cpp的方式進行打包的,因此無論怎樣嘗試都是不能開啟DeepProfile的。后來打了一個Mono的包,果然就可以開啟DeepProfile了,各種函數消耗和GC看得清清楚楚。相關官方文檔的傳送門,建議大家有時間的話仔細閱讀一下。

  

 

 

 

四、總結

  在本篇博客中,馬三跟大家一起學習了如何在真機上開啟Unity Profiler的DeepProfile模式,並且踩了坑:“只有在以Mono的方式打包的apk上才能開啟DeepProfile”,在il2cpp包上是不能開啟DeepProfile的。看來遇到問題還是要多多閱讀官方文檔,畢竟官方文檔是最權威、最一手的資料。

 

 

 

 

如果覺得本篇博客對您有幫助,可以掃碼小小地鼓勵下馬三,馬三會寫出更多的好文章,支持微信和支付寶喲!

       

 

作者:馬三小伙兒
出處:https://www.cnblogs.com/msxh/p/11749405.html 
請尊重別人的勞動成果,讓分享成為一種美德,歡迎轉載。另外,文章在表述和代碼方面如有不妥之處,歡迎批評指正。留下你的腳印,歡迎評論!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM