打造卓越的 Android 遊戲體驗

語言: CN / TW / HK

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

如果您更喜歡通過影片瞭解此內容,請在此處檢視: 

△ Android 遊戲開發工具大升級

  • Bilibili 影片連結

    https://www.bilibili.com/video/BV1B34y1Y7SR/

遊戲效能調優

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

配置 APT 庫

Android 效能調優工具 (Android Performance Tuner,APT) 是專門用於開發者瞭解遊戲效能資料的工具。它可以在 Android Vitals 中幫助您洞察遊戲效能表現,使您能夠在整個 Android 裝置生態中衡量和優化自己的遊戲保真度、載入時間、幀率。並且所有的資料都是來自真實的裝置和真實的玩家,具有極高的參考價值。

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 庫,您需要在每一幀中呼叫一個 tick 函式。不過如果您已經使用了 Android FramePacing 庫,則通過 FramePacing API 初始化時傳入 Swappy_injectTracer 函式就可以自動記錄幀時間了。

如果您用到了 Unity 遊戲引擎,則可以匯入我們的自定義軟體包 (外掛),然後從 Window --> Android Performance Tuner --> Setup 選單進入設定介面來啟用和配置它。此外您還可以使用設定指令碼來初始化 APT 工具。如果您希望瞭解關於 Unity 遊戲引擎的更多資訊和使用幫助,請參閱 Unity Codelab 將 Android 效能調優工具整合進您的 Unity 遊戲

https://developer.android.google.cn/codelabs/android-performance-tuner-unity#0

△ Android 效能調優工具與 Unity 結合使用

下一步是定義註解引數,並將它們與遊戲中的質量級別、場景或其他值得關注的資訊關聯起來。隨後,您需要在適當的上下文呼叫 APT 的 API。

△ Unity 的 APT 外掛中設定註解引數

如果您使用了 Unity 的 Android 效能調優工具外掛,那麼可以在配置面板的註解引數中看到幾個預設的註解: 

  • 場景 (Scene) 註解對映到當前處於前臺的遊戲場景;

  • 載入狀態 (LoadingState);

當然,您也可以在上圖的介面裡新增更多自定義註解引數。如果您集成了 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;
}

△ 定義註解引數

您還可以在 Codelab: 使用 Proto DataStore 中瞭解到更多關於使用 Protocol Buffers 的內容:

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);
}

△ 設定註解引數的值

隨後,您需要呼叫 APT 的 API 告知上下文發生了變化,參見上面的程式碼。

完成 APT 庫的整合和註解引數配置後,您需要在 Google Cloud Console 中啟用 Android Performance Parameters API,這樣才能開始收集玩家資料。參照下圖找到該 API 並啟用: 

△ 在 Google Cloud Console 中啟用 APT

遊戲載入時間調優

對於玩家來說,遊戲的載入時間很大程度影響了他們在閒暇時間開啟遊戲的意願。有了 APT,您可以清楚地看到在不同裝置、不同啟動型別下游戲載入時間的統計圖表: 

△ Android 效能調優工具顯示的載入時間

如下圖所示,startRecordingLoadingTime 方法可以使用給定的事件元資料和註釋建立一個載入時間事件,並且將引數中的控制代碼 (handle) 設定為剛才建立的載入事件,便於後面使用 stopRecordingLoadingTime 方法結束時間記錄過程。

△ Android 效能調優工具記錄載入時間的兩個函式

您一定要記得呼叫 stopRecordingLoadingTime 方法,它會結束此前啟動的載入時間事件,暫存剛才記錄的結果,並於下一次會話清理時將事件記錄上傳到 Google Cloud 進行統計分析。載入時間事件中包含了許多元資料,可以幫助我們正確地區分不同場景下的載入時間,比如應用首次冷啟動、後臺轉前臺執行、載入新關卡等。如果涉及到網路載入,還會顯示載入的資料來源和網路型別資訊。參見圖中的結構體定義: 

△ Android 效能調優工具中載入時間事件包含的元資料

除了提供上面的幾個註解,您還可以新增一些自定義的註解來幫助鎖定引起效能問題的源頭。建立資源載入組也是一種不錯的方法,比如,當您的遊戲從 CDN 下載資源時,會形成大量可以單獨追蹤的下載任務和解壓任務,為它們建立資源載入組可以很方便地分析這些任務執行的效能表現。

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

△ startLoadingGroup 函式簽名

當您完成這些整合和呼叫後,耐心等待一段時間,Google Play 控制檯的 Android Vitals 中就將顯示這些載入時間的統計資訊,比如: 首次載入、冷載入、熱載入、關卡載入時間等等。您可以很方便地瞭解到使用者是否因為載入時間過長,而失去耐心退出遊戲,還可以深入瞭解哪些裝置或者關卡可能遇到了問題。

△  在 Android Vitals 檢視遊戲載入時間統計資訊

Android Vitals 也可以顯示幀率的統計資訊,呈現方式非常類似: 

△  在 Android Vitals 檢視遊戲幀率統計資訊

您可以從中瞭解到哪些裝置的效能不足以支撐遊戲流暢執行,哪些場景造成的幀率下降問題最嚴重。有了這些資訊,您就可以優先針對那些最需要調整優化的使用者群進行改進,讓您的遊戲能在儘可能多的裝置上暢玩。

覆蓋面和裝置

最近我們在 Google Play 控制檯提供了 "覆蓋面和裝置 (Reach and devices)" 功能,它可以幫助您更好地瞭解遊戲覆蓋的裝置、國家區域以及在遊戲生命週期內的測試和優化。您可以看到遊戲的分佈情況、安裝趨勢、崩潰率等統計資訊,便於深入瞭解玩家和他們遇到的問題。

△  安裝分佈和趨勢統計資訊

您還可以從多個維度分析這些資料,比如 SoC (System-on-Chip)、圖形 API (如 OpenGL 和 Vulkan) 等: 

△ 從多種維度分析資料

您還可以用自己的遊戲資料與同類遊戲的公開資料進行比較,從而發現新的開發方向,在著手開發下一版本之前做好充分的準備。另外,針對國家/地區的過濾條件能幫助您精確制定釋出和擴張的計劃。最後,您還可以選擇匯出這些統計資料,點選如圖所示的 "Export report" 即可: 

△ 匯出統計資料報告

Android GPU 檢查器

剛才我們從統計報告中基本確定了需要針對優化的方面,那麼該怎樣做呢?Android GPU 檢查器不僅能提供遊戲執行期間系統活動、高頻硬體計數器的事件跟蹤記錄,還可以用類似 systrace 的工具在時間軸上繪製出時間佔用影象。

Android GPU 檢查器在兩年前新增了對 GPU 視訊記憶體資訊的支援、使用 ANGLE 提供了 OpenGL ES 支援。在相容了更多裝置的同時,也增加了幀檢查器 (Frame Profiler),它可以幫助您深入檢查單個渲染幀,檢視分解後的渲染通道級別的時間資訊。另外,幀檢查器還能幫您檢查分析包括紋理、幾何體、著色器、渲染管線在內的多種 GPU 資訊,從而分析某一幀內進行的各種 GPU 活動。

△ Android GPU 檢查器的新功能

我們也正在與更多的裝置製造商合作,希望能儘快為您提供更多的現有裝置支援。

跨裝置暢玩

截至目前,我們已經實現了在更多的螢幕型別上執行您的遊戲,試想這樣一個場景: 您的玩家在下班路上掏出手機玩了一會兒遊戲,到家後一陣忙碌,終於躺在沙發上,想要開啟平板接著玩。那麼如何保證玩家可以在平板上繼續剛才手機上的遊戲進度呢?

Google Play 遊戲 SDK 為您提供了便捷的方法實現剛才的場景。它可以讓玩家登入,並儲存和同步遊戲進度。這樣一來,當同一賬號在另一臺裝置登入時,您的遊戲就可以檢索並且取回伺服器上的玩家資料,讓他們可以直接從最後儲存的時間點繼續進行。同時,您還可以整合一些熱門功能,比如遊戲的成就係統、玩家排行榜等。

我們正在持續完善 Google Play 遊戲服務,它提供了一個更加簡化的登入 API,您可以在先行體驗版的 SDK 中用一行程式碼實現登入功能,如下所示: 

GamesSignInClient signInCli = PlayGames.getGamesSignInClient(this);
signInCli.isAuthenticated().addOnCompleteListener(task -> {
boolean isAuthenticated =
task.isSuccessful() && task.getResult().isAuthenticated();
if (isAuthenticated) {
// 繼續使用 Google Play 遊戲服務
}
});

△ 更新後的登入 API (預覽版)

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

△ 簡化後的使用者賬戶設定過程

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

△ 2022 年 Google Play 遊戲的新變化

有了這些更新,全球的 20 億 Google Play 遊戲使用者就可以零點選登入 Play 遊戲服務了。

遊戲模式

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

另外,Pixel 6 之類的裝置還集成了新的遊戲中心面板,它能以懸浮窗的方式為使用者提供遊戲模式開關,以及幀率計數器和 YouTube 直播助手等遊戲實用工具。

△ 邊下載邊玩功能

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

總結

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

感謝您的閱讀,歡迎瞭解更多 Android 遊戲開發相關資源: 

  • 面向遊戲開發者的官方文件與更多關於移動優化的指南

    https://developer.android.google.cn/games
  • Android 遊戲開發套件的指南、文件和參考

    https://developer.android.google.cn/games/agdk

您可以通過下方二維碼向我們提交反饋,或分享您喜歡的內容、發現的問題。您的反饋對我們非常重要,感謝您的支援!

推薦閱讀

如頁面未載入,請重新整理重試

點選屏末   閱讀原文  |  即 刻體驗 Android 遊戲開發工具包