博客 / 詳情

返回

更新!!!Unity移動端遊戲性能優化簡譜

UWA官方出品,結合多年優化經驗撰寫了《Unity移動端遊戲性能優化簡譜》,文章從Unity移動端遊戲優化的一些基礎討論出發,例舉和分析了近幾年基於Unity開發的移動端遊戲項目中最為常見的部分性能問題,並展示瞭如何使用UWA的性能檢測工具確定和解決這些問題。

(1)性能優化的基本邏輯
前言中簡單論述了“確定問題-解決問題-持續監控問題”這一既是層層遞進、同時也密不可分的邏輯;踐行遊戲研發“工業化”的UWA嘗試在其中的每一個步驟都提供優良的解決方案。

(2)UWA性能檢測工具
圖文兼備地展示了UWA性能檢測工具在確定和解決性能問題過程中的易用性、可靠性。

(3)常見性能問題
如圖,文章從內存、CPU、GPU三個維度討論了當前遊戲項目中經常出現的一些性能問題作為參考。

圖片

文章自2022年推出以來備受遊戲開發者矚目,並於近期進行了重大更新!不僅在內存問題排查和GPU性能分析兩方面做出了大幅調整和更新,更完善了優化知識體系和方法論。此外,還針對其他部分進行了修正和調優,讓你更輕鬆地掌握性能優化的核心原理和方法。

無論你是初入行業的開發者,還是經驗豐富的大佬,這本簡譜都將成為你的得力助手,幫助你解決各種性能優化難題,提升性能表現,助你一臂之力!


目錄

1|前言
2|分門別類地控制運行時內存
3|以模塊思維劃分的CPU耗時調優
4|達到GPU壓力與畫面表現間的平衡


本篇轉載自《Unity移動端遊戲性能優化簡譜》的第1節。

1.1 玩家眼中的遊戲性能

任何一個玩家在遊玩遊戲過程中都會碰到類似的疑問:為什麼我玩一段時間就會閃退?為什麼我的遊戲這麼卡?為什麼我的硬件這麼燙?為什麼移動設備電量下得這麼快?

對於玩家而言,無關手裏這款遊戲本身的美術是否精良、玩法是否有趣,當上述這些疑問出現時,其遊戲體驗會自然而然地變差,並不可避免地導致黏性下降。這是每個遊戲開發者都不想看到的結果。

而實情是,對於如今的移動端遊戲市場而言,國內市面上各類硬件機型性能跨度很大;如果項目要支持海外市場,則往往項目所要承擔的性能壓力更大。那麼,如何讓持有不同硬件設備的玩家,尤其是通過中低端設備接觸到我們遊戲項目的玩家也能順利流暢地體驗遊戲內容,就是我們今天討論的主要話題。

1.2 開發者關注的遊戲性能

在遊戲項目的開發過程中,一個非常常見的現象是:研發團隊在新項目的中前期往往把全部精力投入到實現功能中去,而忽略了性能優化的工作;到了遊戲中後期甚至臨近上線的時候進行測試,才發現項目充斥着大量嚴重的性能問題、影響到了遊戲的正常體驗,但卻不知道從何改起、時間非常窘迫;再到上線後,受到大量玩家對性能的負面反饋,留存數據也受到影響。

足以見得,性能問題是一款遊戲項目重要的生命線,需要開發者樹立良好的優化意識和優化知識體系,才能讓項目少走彎路。

和玩家視角不同的是,像閃退、卡頓、發熱、耗電這種感官層面的性能問題,UWA認為在開發者的視角中應該將其主要分類為內存、CPU、GPU三個大類的問題。本文的主要內容旨在圍繞三個大類的常見典型問題進行例舉和討論,從而形成一份Unity移動端遊戲性能優化方法論的簡譜。

那麼,既然已經發現了若干性能問題,如何排查確定問題和解決問題就成了最關鍵的兩個步驟。

1.3 如何確定問題

發現了性能問題後的第一大步驟就是確定問題。

舉例而言,我們的遊戲項目運行時間一長就會閃退,是因為我們的緩存策略做的不好或者存在冗餘現象,導致內存不斷上升造成的閃退?還是因為我們的美術資源內存控制的不好,幾個較大的資源就輕易把整體內存給撐大了?

又或者我們發現一個遊戲場景卡頓嚴重、幀率很低,是因為這裏的同屏渲染面片數和DrawCall數都太高導致渲染模塊壓力大?還是因為此處的UI過於複雜且變化頻繁造成的更新耗時?

還或者我們感到手裏的手機燙的驚人,是不是因為當前場景GPU壓力過大,我們在當前機型上做的分級策略並不合適?

以上只是眾多千奇百怪層出不窮的性能問題中的寥寥幾點。後文還將詳細討論一些比較常見的問題。總之,確定問題的工作本身也是一項挑戰。

1.3.1 計算機語言/圖形學/遊戲引擎知識

知識和經驗無疑是一個開發者在優化項目性能時最寶貴的武器,不斷地學習和更新也是每一個程序員武裝起自己的過程。完善而飽滿的知識自然不僅僅有利於確定問題,同樣有助於解決問題。放在這裏説是因為它是我們有能力着手優化工作的重要前提。

除了查看各類工具源碼和文檔、跟蹤工具更新內容、翻閲大牛撰寫的書籍、瀏覽各類技術論壇和博客等等以外,也可以在UWA的技術社區中找到很多優質內容。

UWA 學堂:持續更新各類優質課程,內容從某些開發工具的入門和使用到某個引擎模塊的機制原理詳解;從最新的移動端遊戲技術實踐到精品項目案例講解等等。還邀請了眾多具有多年從業經驗的業界大佬和著名遊戲公司合作伙伴撰稿,涵蓋面廣、質量頗高。更令人振奮的是,受疫情影響沉寂了一段時間的UWA DAY,今年將重新回到大家的視野,與廣大開發者在線下見面,敬請從官網、官方微信等渠道關注最新消息。

UWA問答:幫助開發者找到更好的答案。是遊戲開發者們日常溝通交流技術問題的良好平台。在這裏你對遊戲製作方方面面的任何問題,都能夠得到討論或解答。通過最直接的技術交流來少走彎路、獲得經過實踐檢驗的開發經驗,讓確定和解決問題的過程變得簡單許多。

UWA開源庫:幫助開發者發現更好的解決方案。不斷更新和整合了各種來源的開源項目,翻譯完畢、分類清晰、圖文並茂,為開發者提供了更加方便地搜索發現和獲取開源資源的渠道。

UWA Blog:包含UWA精選的各類技術文章、提醒學堂優質內容上新、整合問答優質問題、介紹UWA產品和其更新等各類UWA社區動向。

1.3.2 多種多樣的輔助工具

工欲善其事必先利其器。使用工具獲得直接精確的性能數據,能更加直觀地反映出性能瓶頸,從而達到事半功倍的效果。

隨着業界的發展和成熟,各大引擎、IDE和硬件廠家都推出並更新着自己的性能分析輔助工具,也有不少開發者或團隊喜歡根據自身項目的情況開發自己的性能監控插件。

以引擎而言,Unity Profiler是很多開發者都會用且在用的工具,可以記錄並查看CPU/渲染/UI/內存等各模塊的實時消耗參數;此外,Unity還衍生出Frame Debugger、Memory Profiler等越來越成熟有用的編輯器性能分析工具。

以IDE而言,Windows、MAC OS/iOS、Andriod平台都分別有適用的工具,如Visual Studio的性能探查器、XCode的Instruments、Android Studio的Profiler等。

以硬件而言,SnapDragon Profiler、XCode Metal Frame Capture、Mali Graphics Debugger等種類就更多了,不一一贅述。

總而言之,根據開發者的使用熟練度、不同硬件平台的兼容性、工具功能的覆蓋面等等因素,開發者在挑選合適的性能優化輔助工具時很容易挑花眼。

1.3.3 UWA工具

那麼有沒有一款簡單易用、兼容性強、功能全面的性能優化輔助工具呢?

當然有啦~

UWA GOT Online工具可以通過UWA提供的SDK快速集成到測試項目中,在真機上完成測試流程後,在極短的時間內完成數據的上傳和解析,從而自動生成一系列可視化的圖表。與此同時,還基於UWA豐富的優化經驗和龐大的數據庫進行評分,根據各個性能模塊提供針對性的分析建議和性能參數的變化趨勢。

不僅如此,UWA還提供了GPM、GOT、真人真機測試服務、在線AssetBundle檢測、本地資源檢測、Pipeline、GPM 2.0、深度優化駐場等工具或服務,從不同維度滿足開發者的優化需求。

1.4 如何解決問題

性能的第二大步驟就是解決問題。在有了知識經驗和上述工具的加持下,我們的項目越是複雜、越是來到後期,就越是會面臨一條長長的優化問題清單。在有限時間裏合理地規劃並縮短這條清單,就是我們面臨的下一項挑戰。

1.4.1 優化工作優先級

在進行具體的優化工作前,合理的規劃往往能節省大量總體時間。

規劃工作的第一點就是要抓住問題的主要矛盾。在一條長長的優化清單中,把每一項條目並行地、完全地優化完畢往往是不現實的。此時就需要重新整理這份清單,按照優先級重新進行排序,為優化性價比更高的問題投入更多。

對於優先級的判斷,UWA認為主要參考兩點:一是重要性,如果一個問題對當前場景的性能壓力影響遠大於其他因素、顯然是主要矛盾,如果不予修正很難維持正常的遊戲體驗,那麼就應該投入更多的人力時間集中優先解決;二是易操作性,如果一個問題造成的性能壓力相對來説並不大,但只是耗費極少功夫的舉手之勞,比如只是在引擎設置中關閉一個開關,就應該優先把它改掉。

1.4.2 性能和效果的權衡

第二點則是一種取捨,針對資源和渲染等部分的優化往往會影響到遊戲的表現效果。為此,程序員往往需要和策劃、美工同事加強溝通,在兩者之間找到一個平衡點。這種平衡是一種動態平衡,需要結合實際情況操作。比如,一款吃雞遊戲畫面變化頻繁、且需要流暢的聯機戰鬥操作,那麼對錶現的要求可以適當低一些;而一款養成類遊戲把精美的角色作為賣點,其模型和動畫就需要非常精緻,而犧牲一部分性能。哪怕在同一款遊戲中也可以在過場動畫和角色展示界面中注重表現,而在戰鬥場景中關注性能,需要具體問題具體分析。

總的來説,遊戲項目的優化最終目標是能夠在玩家硬件上順利運行,而為此放棄很大一部分表現效果,也是大多數開發團隊的實際選擇。但,UWA在大量的項目優化實踐中發現,往往很多對錶現並無貢獻、屬於完全浪費地性能問題佔據了相當大的比例,優先解決這類問題的優先級顯然要更高。

1.4.3 分級策略和制定標準

第三點,在每一類機型上都達成上述的平衡就是我們的分級策略。我們大可以在高端機乃至旗艦機上開啓後處理、使用高分辨率高模;但在中低端機型上則使用另外一套標準。

制定分級策略同樣需要我們根據項目類型調整。更細節準確的分級還應參考項目發行目標市場的硬件機型和同類遊戲的分檔經驗,具體可以參考文章《基於移動設備算力的UWA性能標準系統上線》。

另外,開發團隊還最好制定一套詳盡合理的標準來管理約束整個開發流程。最常見的就是制定美術資源標準,從而極大程度避免內存問題的失控。Unity還提供了回調函數在資源導入時就進行歸一化設置,具體也可以在UWA學堂中找到相關課程《自動化規範Unity資源的實踐》。

1.4.4 UWA建議

規劃完畢後就來到了具體的優化工作。這個工作冗長且需要耐心,而UWA很樂意在這個過程中繼續提供幫助:

你當然可以在UWA社區中尋找方法,或者是在UWA工具的自動化報告中找到解決方案。你還可以聯繫UWA工作人員,從而提供真人真機測試報告1對1講解服務或者是更進一步地深度優化服務。UWA的引擎技術團隊將對遊戲項目進行更加詳細的診斷和建議。

1.5 如何持續監控性能

在邁出了性能優化的前兩步後,很多開發團隊都想要或者嘗試走出第三步,也就是持續監控性能的這一步。

為此,一些團隊安排專門的引擎優化人員、開發自己的DevOps工具。當在團隊內部逐步形成較為成熟的相關體系後,將節省項目後續開發維護的成本,並可使經驗延續到其他新項目中,大大提升開發效率。

而另外一些團隊則有在遊戲上線後繼續監控性能的必要。

1.5.1 UWA Pipeline

針對這些需求,UWA推出了UWA Pipeline。它是一款面向遊戲開發團隊的本地協作平台,旨在為遊戲開發團隊搭建專屬的DevOps研發交付流水線。

UWA Pipeline主要包括:

  1. 專屬的DevOps研發交付流水線
  2. 私有云真機遠程調試
  3. 可視化配製自動測試
  4. Pipeline內快速創建UWA服務
  5. 支持遠程構建

五大功能,提供了專為遊戲設計的DevOps研發交付流水線,且集成了各項UWA工具和服務,構建簡單、操作便利。更多詳細信息歡迎點擊下文了解。

《速成,掌握UWA Pipeline 功能和使用方法》
《UWA Pipeline的使用與自動化流水線的搭建詳解》

1.5.2 UWA GPM 2.0

UWA持續吸取各個開發團隊對於性能監控方面的需求,發現遊戲上線後玩家端的性能情況在很多時候具有無可替代的參考價值,協助開發者發現許多在研發迭代、Development包階段難以發現的諸多性能問題,從而指導開發團隊後續的性能優化方向。

GPM 2.0是一款基於UWA Pipeline、面向遊戲開發團隊的遊戲運行性能監測平台,旨在幫助遊戲開發團隊監控和分析遊戲項目上線後玩家真實的性能運行情況,及時發現並解決遊戲性能問題,進而提升玩家遊戲體驗。

主要提供:

  1. 遊戲宏觀性能指標的分鐘級實時監控
  2. 根據遊戲版本、遊戲場景、硬件設備分級的數據聚合分析與對比
  3. 可自由配置的性能異常場景次數統計
  4. 具體到玩家的深度性能數據分析
  5. 遊戲運行的硬件信息統計

以上就是《Unity移動端遊戲性能優化簡譜》的第1節,此篇文章比較適合有一定Unity引擎知識和開發經驗,從事Unity性能優化的技術人員;需求高效精準的性能優化工具、提升優化工作效率的開發者以及對遊戲研發“工業化”理念感興趣,想要系統性地建立優化思維的讀者。

讀完全篇後你會獲得:
1、瞭解如何使用UWA工具發現和確定性能問題;
2、瞭解常見的性能問題和其解決辦法;
3、上述內容的圖文並茂的直觀展示。

user avatar wbsys 頭像
1 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.