0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Android 游戲性能調(diào)優(yōu)的一些技巧

谷歌開發(fā)者 ? 來源:谷歌開發(fā)者 ? 作者:谷歌開發(fā)者 ? 2022-09-08 11:16 ? 次閱讀

Android 游戲開發(fā)工具大升級中,我們介紹了 Android 游戲開發(fā)套件的豐富功能和多項 API 改進,并針對大屏幕設備的游戲開發(fā)提供了一些建議,同時介紹了處理、分發(fā)大型游戲素材的最佳實踐。本文我們將提供幾則在游戲性能優(yōu)化方面的技巧,同時向您介紹 Android 在游戲方面引入的新特性。讓我們一起打造卓越的 Android 游戲體驗吧!

如果您更喜歡通過視頻了解此內(nèi)容,請在此處查看:

△Android 游戲開發(fā)工具大升級

Bilibili 視頻鏈接
https://www.bilibili.com/video/BV1B34y1Y7SR/

游戲性能調(diào)優(yōu)

在上一篇文章中,我們了解了如何通過合理的 DPI 選擇、紋理優(yōu)化等方式讓游戲在更多的硬件上運行。然而僅僅能運行還不夠,或許您也非常希望能了解這些選擇和配置是否為玩家提供了足夠優(yōu)秀的用戶體驗,以及接下來有哪些方法能幫助您不斷優(yōu)化應用,并逐漸將應用推廣至更大的用戶群中。

配置 APT 庫

Android 性能調(diào)優(yōu)工具 (Android Performance Tuner,APT) 是專門用于開發(fā)者了解游戲性能數(shù)據(jù)的工具。它可以在 Android Vitals 中幫助您洞察游戲性能表現(xiàn),使您能夠在整個 Android 設備生態(tài)中衡量和優(yōu)化自己的游戲保真度、加載時間、幀率。并且所有的數(shù)據(jù)都是來自真實的設備和真實的玩家,具有極高的參考價值。

void InitAPI(JNIEnv* env, jobject activity) {    SwappyGL_init(env, activity);     swappy_enabled = SwappyGL_isEnabled();    TFSettings settings {};    if (swappy_enabled) {        settings.swappy_tracer_fn = &SwappyGL_injectTracer;    }    // ...}

△ 使用 Swappy_injectTracer 自動記錄幀信息

要使用 APT 庫,您需要在每一幀中調(diào)用一個 tick 函數(shù)。不過如果您已經(jīng)使用了 Android FramePacing 庫,則通過 FramePacing API 初始化時傳入 Swappy_injectTracer 函數(shù)就可以自動記錄幀時間了。

如果您用到了 Unity 游戲引擎,則可以導入我們的自定義軟件包 (插件),然后從 Window --> Android Performance Tuner --> Setup 菜單進入設置界面來啟用和配置它。此外您還可以使用設置腳本來初始化 APT 工具。如果您希望了解關于 Unity 游戲引擎的更多信息和使用幫助,請參閱 Unity Codelab 將 Android 性能調(diào)優(yōu)工具整合進您的 Unity 游戲:

https://developer.android.google.cn/codelabs/android-performance-tuner-unity#0 d72061ee-2e90-11ed-ba43-dac502259ad0.png △?Android 性能調(diào)優(yōu)工具與 Unity 結(jié)合使用 下一步是定義注解參數(shù),并將它們與游戲中的質(zhì)量級別、場景或其他值得關注的信息關聯(lián)起來。隨后,您需要在適當?shù)纳舷挛恼{(diào)用 APT 的 API。 d74865ea-2e90-11ed-ba43-dac502259ad0.png △?Unity 的 APT 插件中設置注解參數(shù)

如果您使用了 Unity 的 Android 性能調(diào)優(yōu)工具插件,那么可以在配置面板的注解參數(shù)中看到幾個默認的注解:

場景 (Scene) 注解映射到當前處于前臺的游戲場景;

加載狀態(tài) (LoadingState);

當然,您也可以在上圖的界面里添加更多自定義注解參數(shù)。如果您集成了 C/C++ 的引擎,那么需要您用 Protocol Buffers 來定義這些注解:

import "tuningfork.proto"enum LoadingState {  INVALID_LS = 0; LOADING = 1; NOT_LOADING = 2;}enum Level {  INVALID_LEVEL = 0; Level_1 = 1; Level_2 = 2; Level_3 = 3;}message Annotation {  optional LoadingState loading_state = 1;  optional Level level = 2;}

△定義注解參數(shù)

您還可以在 Codelab: 使用 Proto DataStore 中了解到更多關于使用 Protocol Buffers 的內(nèi)容: https://developer.android.google.cn/codelabs/android-proto-datastore#0

extern "C"void SetAnnotations() {  Annotation a;  a.set_loading(     sLoading ? proto_tf::LOADING : proto_tf::NOT_LOADING  );  a.set_level((proto_tf::Level) sLevel)  auto ser = tf::TuningFork_CProtobufSerialization_Alloc(a);  TuningFork_setCurrentAnnotation(&ser);  TuningFork_CProtobufSerialization_free(&ser);}

△設置注解參數(shù)的值

隨后,您需要調(diào)用 APT 的 API 告知上下文發(fā)生了變化,參見上面的代碼。

完成 APT 庫的集成和注解參數(shù)配置后,您需要在 Google Cloud Console 中啟用 Android Performance Parameters API,這樣才能開始收集玩家數(shù)據(jù)。參照下圖找到該 API 并啟用:

d757839a-2e90-11ed-ba43-dac502259ad0.png △?在 Google Cloud Console 中啟用 APT

游戲加載時間調(diào)優(yōu)

對于玩家來說,游戲的加載時間很大程度影響了他們在閑暇時間打開游戲的意愿。有了 APT,您可以清楚地看到在不同設備、不同啟動類型下游戲加載時間的統(tǒng)計圖表: d77854e4-2e90-11ed-ba43-dac502259ad0.png △?Android 性能調(diào)優(yōu)工具顯示的加載時間 如下圖所示,startRecordingLoadingTime 方法可以使用給定的事件元數(shù)據(jù)和注釋創(chuàng)建一個加載時間事件,并且將參數(shù)中的句柄 (handle) 設置為剛才創(chuàng)建的加載事件,便于后面使用 stopRecordingLoadingTime 方法結(jié)束時間記錄過程。 d79292aa-2e90-11ed-ba43-dac502259ad0.png △?Android 性能調(diào)優(yōu)工具記錄加載時間的兩個函數(shù) 您一定要記得調(diào)用 stopRecordingLoadingTime 方法,它會結(jié)束此前啟動的加載時間事件,暫存剛才記錄的結(jié)果,并于下一次會話清理時將事件記錄上傳到 Google Cloud 進行統(tǒng)計分析。加載時間事件中包含了許多元數(shù)據(jù),可以幫助我們正確地區(qū)分不同場景下的加載時間,比如應用首次冷啟動、后臺轉(zhuǎn)前臺運行、加載新關卡等。如果涉及到網(wǎng)絡加載,還會顯示加載的數(shù)據(jù)源和網(wǎng)絡類型信息。參見圖中的結(jié)構(gòu)體定義:?

d7b8b41c-2e90-11ed-ba43-dac502259ad0.png

△Android 性能調(diào)優(yōu)工具中加載時間事件包含的元數(shù)據(jù)

除了提供上面的幾個注解,您還可以添加一些自定義的注解來幫助鎖定引起性能問題的源頭。創(chuàng)建資源加載組也是一種不錯的方法,比如,當您的游戲從 CDN 下載資源時,會形成大量可以單獨追蹤的下載任務和解壓任務,為它們創(chuàng)建資源加載組可以很方便地分析這些任務執(zhí)行的性能表現(xiàn)。

這些組也可以添加注解,這樣您就可以看到造成特定場景加載緩慢的原因了。此時需要使用另一組方法,圖中給出的是啟動記錄的方法 startLoadingGroup 的函數(shù)簽名:

d7cc0440-2e90-11ed-ba43-dac502259ad0.png

△startLoadingGroup 函數(shù)簽名 當您完成這些集成和調(diào)用后,耐心等待一段時間,Google Play 控制臺的 Android Vitals 中就將顯示這些加載時間的統(tǒng)計信息,比如:首次加載、冷加載、熱加載、關卡加載時間等等。您可以很方便地了解到用戶是否因為加載時間過長,而失去耐心退出游戲,還可以深入了解哪些設備或者關卡可能遇到了問題。 d7f644ee-2e90-11ed-ba43-dac502259ad0.png

△在 Android Vitals 查看游戲加載時間統(tǒng)計信息

Android Vitals 也可以顯示幀率的統(tǒng)計信息,呈現(xiàn)方式非常類似: d809d96e-2e90-11ed-ba43-dac502259ad0.png △?在 Android Vitals 查看游戲幀率統(tǒng)計信息 您可以從中了解到哪些設備的性能不足以支撐游戲流暢運行,哪些場景造成的幀率下降問題最嚴重。有了這些信息,您就可以優(yōu)先針對那些最需要調(diào)整優(yōu)化的用戶群進行改進,讓您的游戲能在盡可能多的設備上暢玩。

覆蓋面和設備

最近我們在 Google Play 控制臺提供了 "覆蓋面和設備 (Reach and devices)" 功能,它可以幫助您更好地了解游戲覆蓋的設備、國家區(qū)域以及在游戲生命周期內(nèi)的測試和優(yōu)化。您可以看到游戲的分布情況、安裝趨勢、崩潰率等統(tǒng)計信息,便于深入了解玩家和他們遇到的問題。

d82914aa-2e90-11ed-ba43-dac502259ad0.png

△安裝分布和趨勢統(tǒng)計信息 您還可以從多個維度分析這些數(shù)據(jù),比如 SoC (System-on-Chip)、圖形 API (如 OpenGL 和 Vulkan) 等:

d84bce32-2e90-11ed-ba43-dac502259ad0.png

△從多種維度分析數(shù)據(jù) 您還可以用自己的游戲數(shù)據(jù)與同類游戲的公開數(shù)據(jù)進行比較,從而發(fā)現(xiàn)新的開發(fā)方向,在著手開發(fā)下一版本之前做好充分的準備。另外,針對國家/地區(qū)的過濾條件能幫助您精確制定發(fā)布和擴張的計劃。最后,您還可以選擇導出這些統(tǒng)計數(shù)據(jù),點擊如圖所示的 "Export report" 即可:

d85f4002-2e90-11ed-ba43-dac502259ad0.png

△導出統(tǒng)計數(shù)據(jù)報告

Android GPU 檢查器

剛才我們從統(tǒng)計報告中基本確定了需要針對優(yōu)化的方面,那么該怎樣做呢?Android GPU 檢查器不僅能提供游戲運行期間系統(tǒng)活動、高頻硬件計數(shù)器的事件跟蹤記錄,還可以用類似 systrace 的工具在時間軸上繪制出時間占用圖像。

Android GPU 檢查器在兩年前新增了對 GPU 顯存信息的支持、使用 ANGLE 提供了 OpenGL ES 支持。在兼容了更多設備的同時,也增加了幀檢查器 (Frame Profiler),它可以幫助您深入檢查單個渲染幀,查看分解后的渲染通道級別的時間信息。另外,幀檢查器還能幫您檢查分析包括紋理、幾何體、著色器、渲染管線在內(nèi)的多種 GPU 信息,從而分析某一幀內(nèi)進行的各種 GPU 活動。

d866c35e-2e90-11ed-ba43-dac502259ad0.png △?Android GPU 檢查器的新功能

我們也正在與更多的設備制造商合作,希望能盡快為您提供更多的現(xiàn)有設備支持。

跨設備暢玩

截至目前,我們已經(jīng)實現(xiàn)了在更多的屏幕類型上運行您的游戲,試想這樣一個場景:您的玩家在下班路上掏出手機玩了一會兒游戲,到家后一陣忙碌,終于躺在沙發(fā)上,想要打開平板接著玩。那么如何保證玩家可以在平板上繼續(xù)剛才手機上的游戲進度呢?

Google Play 游戲 SDK 為您提供了便捷的方法實現(xiàn)剛才的場景。它可以讓玩家登錄,并保存和同步游戲進度。這樣一來,當同一賬號在另一臺設備登錄時,您的游戲就可以檢索并且取回服務器上的玩家數(shù)據(jù),讓他們可以直接從最后保存的時間點繼續(xù)進行。同時,您還可以集成一些熱門功能,比如游戲的成就系統(tǒng)、玩家排行榜等。

我們正在持續(xù)完善 Google Play 游戲服務,它提供了一個更加簡化的登錄 API,您可以在先行體驗版的 SDK 中用一行代碼實現(xiàn)登錄功能,如下所示:

GamesSignInClient signInCli = PlayGames.getGamesSignInClient(this);signInCli.isAuthenticated().addOnCompleteListener(task -> {  boolean isAuthenticated =     task.isSuccessful() && task.getResult().isAuthenticated();  if (isAuthenticated) {    // 繼續(xù)使用 Google Play 游戲服務  }});
△ 更新后的登錄 API (預覽版)

我們還計劃簡化用戶賬戶的創(chuàng)建過程,當他們安裝 Google Play 游戲應用時就會順便創(chuàng)建個人資料了。這樣一來,即使用戶還沒有安裝好 Google Play 游戲應用,也能很快完成賬戶創(chuàng)建,然后回到游戲暢玩了。

△簡化后的用戶賬戶設置過程

另外,我們正著力于進一步簡化自動登錄流程,注冊過的用戶重新登錄會變得更加簡單。從 2022 年開始,用戶就不再需要先安裝 Google Play 游戲應用才能使用 Play 游戲服務了。

△ 2022 年 Google Play 游戲的新變化

有了這些更新,全球的 20 億 Google Play 游戲用戶就可以零點擊登錄 Play 游戲服務了。

游戲模式

隨著越來越多玩家青睞移動游戲,我們也致力于讓 Android 系統(tǒng)給游戲玩家和開發(fā)者提供更多的便利。從 Android 12 開始,部分設備將提供游戲模式 (Game Mode) API。這些 API 能讓設備按照用戶的需求提供極致的整機性能、平衡的性能或是最佳電池續(xù)航。而您前期為了適配各種設備對游戲所做的各項工作,剛好也可以用于響應這些性能相關的用戶偏好。

d8f764fe-2e90-11ed-ba43-dac502259ad0.png

另外,Pixel 6 之類的設備還集成了新的游戲中心面板,它能以懸浮窗的方式為用戶提供游戲模式開關,以及幀率計數(shù)器和 YouTube 直播助手等游戲?qū)嵱霉ぞ摺?/p>

d9076a48-2e90-11ed-ba43-dac502259ad0.png △ 邊下載邊玩功能

從 Android 12 開始提供的 "邊下載邊玩" 功能可以減少玩家的等待時間,讓他們更快開始游戲。為了支持這項功能,您需要使用 App Bundle 來提交游戲,并且需要避免使用一些舊版本的 Ads SDK。這是因為舊版本的 Ads SDK 會在使用資源之前對其進行分析,這類行為會妨礙邊下載邊玩功能的實現(xiàn)。

總結(jié)

我們一起走過的漫漫長路因為有您的參與而生機勃勃。我們非常感謝您對 Android 游戲開發(fā)事業(yè)的支持,同時希望能給您提供更好的支持。在這篇文章中,我們向您分享了 Android 游戲性能調(diào)優(yōu)的一些技巧,以及 Google Play 游戲服務的多項服務開發(fā)者和玩家的改進、基于性能調(diào)優(yōu)工具的 Android Vitals 分析面板。我們也希望這些新特性和改進,能讓玩家享受到更優(yōu)秀的游戲體驗,也能助力您更高效更輕松地開發(fā)游戲作品!

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Android
    +關注

    關注

    12

    文章

    3949

    瀏覽量

    128496
  • API
    API
    +關注

    關注

    2

    文章

    1531

    瀏覽量

    62798
  • 開發(fā)套件

    關注

    2

    文章

    160

    瀏覽量

    24394

原文標題:打造卓越的 Android 游戲體驗

文章出處:【微信號:Google_Developers,微信公眾號:谷歌開發(fā)者】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    史上最全性能調(diào)優(yōu)總結(jié)

    在說什么是性能調(diào)優(yōu)之前,我們先來說下,計算機的體系結(jié)構(gòu)。
    的頭像 發(fā)表于 05-13 08:57 ?6513次閱讀
    史上最全<b class='flag-5'>性能</b><b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b>總結(jié)

    HBase性能調(diào)優(yōu)概述

    HBase性能調(diào)優(yōu)
    發(fā)表于 07-03 11:35

    基于全HDD aarch64服務器的Ceph性能調(diào)優(yōu)實踐總結(jié)

    如ISA-L也都在arm平臺上進行了優(yōu)化。- 對于SPDK,也是從軟件層面在arm平臺上進行了優(yōu)化。4.3 操作系統(tǒng)調(diào)優(yōu)從Linux內(nèi)核來調(diào)優(yōu)Ceph
    發(fā)表于 07-05 14:26

    infosphere CDC性能調(diào)優(yōu)的文檔

    infosphere CDC性能調(diào)優(yōu)的文檔
    發(fā)表于 09-07 09:30 ?7次下載
    infosphere CDC<b class='flag-5'>性能</b><b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b>的文檔

    基于Android平臺的手機游戲的設計與實現(xiàn)

    本文首先提出了Android 游戲開發(fā)的總體框架,研究并總結(jié)了Android 游戲開發(fā)涉及的一些關鍵技術(shù),包括
    發(fā)表于 01-31 05:42 ?39次下載

    微軟改進最新版SteamVR游戲性能

    Windows Insiders早期推出,據(jù)說,該產(chǎn)品可以提升一些通過Steam購買的游戲性能,例如Samsung Odyssey等微軟支持的耳機。 根據(jù)微軟的博客文章所述,其更新包括:
    的頭像 發(fā)表于 03-10 17:18 ?4286次閱讀

    如何對電機進行調(diào)優(yōu)?調(diào)優(yōu)的好處是什么?

    如何自動對電機進行調(diào)優(yōu)
    的頭像 發(fā)表于 08-22 00:03 ?3220次閱讀

    一些獨立游戲的展示介紹

    MIX的賈斯汀伍德沃德介紹了他在加利福尼亞州洛杉磯的SIGGRAPH 2015展示的一些獨立游戲。
    的頭像 發(fā)表于 11-07 06:51 ?2312次閱讀

    ElasticSearch調(diào)優(yōu)需要注意什么

    ? S官方調(diào)優(yōu)指南 第部分:調(diào)優(yōu)索引速度 第二部分:調(diào)優(yōu)
    的頭像 發(fā)表于 09-02 17:24 ?1570次閱讀

    Linux用電功耗調(diào)優(yōu)的筆記分享

    整理一些Linux用電功耗調(diào)優(yōu)的筆記,分享給小伙伴,關于用電調(diào)優(yōu)個人覺得
    的頭像 發(fā)表于 06-23 15:19 ?4327次閱讀

    javajvm調(diào)優(yōu)有幾種方法

    JVM調(diào)優(yōu)是Java應用程序性能優(yōu)化過程中的重要步驟,它通過針對JVM進行優(yōu)化來提高應用程序的性能和可靠性。JVM調(diào)
    的頭像 發(fā)表于 12-05 11:11 ?2245次閱讀

    jvm調(diào)優(yōu)主要是調(diào)哪里

    ,棧內(nèi)存存儲方法調(diào)用和局部變量,非堆內(nèi)存用于存儲加載的類信息以及一些靜態(tài)變量等。 1.1 堆內(nèi)存調(diào)優(yōu) 堆內(nèi)存是JVM中最主要的內(nèi)存區(qū)域,常見的調(diào)優(yōu)
    的頭像 發(fā)表于 12-05 11:37 ?1665次閱讀

    jvm調(diào)優(yōu)工具有哪些

    JVM調(diào)優(yōu)是提高Java應用程序性能的重要手段,而JVM調(diào)優(yōu)工具則是輔助開發(fā)人員進行調(diào)
    的頭像 發(fā)表于 12-05 11:44 ?1220次閱讀

    鴻蒙開發(fā)實戰(zhàn):【性能調(diào)優(yōu)組件】

    性能調(diào)優(yōu)組件包含系統(tǒng)和應用調(diào)優(yōu)框架,旨在為開發(fā)者提供性能
    的頭像 發(fā)表于 03-13 15:12 ?584次閱讀
    鴻蒙開發(fā)實戰(zhàn):【<b class='flag-5'>性能</b><b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b>組件】

    新Bios更新 !保持出廠游戲性能!

    解讀新 BIOS 的一些特性,以及新老 BIOS 的游戲性能差距。這里多說句,我們的老 BIOS 匹配的是產(chǎn)品剛發(fā)布時的性能,這樣才能做
    的頭像 發(fā)表于 06-26 17:55 ?596次閱讀
    新Bios更新 !保持出廠<b class='flag-5'>游戲性能</b>!