在 Android 游戲開(kāi)發(fā)工具大升級(jí)中,我們介紹了 Android 游戲開(kāi)發(fā)套件的豐富功能和多項(xiàng) API 改進(jìn),并針對(duì)大屏幕設(shè)備的游戲開(kāi)發(fā)提供了一些建議,同時(shí)介紹了處理、分發(fā)大型游戲素材的最佳實(shí)踐。本文我們將提供幾則在游戲性能優(yōu)化方面的技巧,同時(shí)向您介紹 Android 在游戲方面引入的新特性。讓我們一起打造卓越的 Android 游戲體驗(yàn)吧!
如果您更喜歡通過(guò)視頻了解此內(nèi)容,請(qǐng)?jiān)诖颂幉榭?
△Android 游戲開(kāi)發(fā)工具大升級(jí)
Bilibili 視頻鏈接
https://www.bilibili.com/video/BV1B34y1Y7SR/
游戲性能調(diào)優(yōu)
在上一篇文章中,我們了解了如何通過(guò)合理的 DPI 選擇、紋理優(yōu)化等方式讓游戲在更多的硬件上運(yùn)行。然而僅僅能運(yùn)行還不夠,或許您也非常希望能了解這些選擇和配置是否為玩家提供了足夠優(yōu)秀的用戶(hù)體驗(yàn),以及接下來(lái)有哪些方法能幫助您不斷優(yōu)化應(yīng)用,并逐漸將應(yīng)用推廣至更大的用戶(hù)群中。
配置 APT 庫(kù)
Android 性能調(diào)優(yōu)工具 (Android Performance Tuner,APT) 是專(zhuān)門(mén)用于開(kāi)發(fā)者了解游戲性能數(shù)據(jù)的工具。它可以在 Android Vitals 中幫助您洞察游戲性能表現(xiàn),使您能夠在整個(gè) Android 設(shè)備生態(tài)中衡量和優(yōu)化自己的游戲保真度、加載時(shí)間、幀率。并且所有的數(shù)據(jù)都是來(lái)自真實(shí)的設(shè)備和真實(shí)的玩家,具有極高的參考價(jià)值。
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 自動(dòng)記錄幀信息
要使用 APT 庫(kù),您需要在每一幀中調(diào)用一個(gè) tick 函數(shù)。不過(guò)如果您已經(jīng)使用了 Android FramePacing 庫(kù),則通過(guò) FramePacing API 初始化時(shí)傳入 Swappy_injectTracer 函數(shù)就可以自動(dòng)記錄幀時(shí)間了。
如果您用到了 Unity 游戲引擎,則可以導(dǎo)入我們的自定義軟件包 (插件),然后從 Window --> Android Performance Tuner --> Setup 菜單進(jìn)入設(shè)置界面來(lái)啟用和配置它。此外您還可以使用設(shè)置腳本來(lái)初始化 APT 工具。如果您希望了解關(guān)于 Unity 游戲引擎的更多信息和使用幫助,請(qǐng)參閱 Unity Codelab 將 Android 性能調(diào)優(yōu)工具整合進(jìn)您的 Unity 游戲:
https://developer.android.google.cn/codelabs/android-performance-tuner-unity#0 △?Android 性能調(diào)優(yōu)工具與 Unity 結(jié)合使用 下一步是定義注解參數(shù),并將它們與游戲中的質(zhì)量級(jí)別、場(chǎng)景或其他值得關(guān)注的信息關(guān)聯(lián)起來(lái)。隨后,您需要在適當(dāng)?shù)纳舷挛恼{(diào)用 APT 的 API。 △?Unity 的 APT 插件中設(shè)置注解參數(shù)
如果您使用了 Unity 的 Android 性能調(diào)優(yōu)工具插件,那么可以在配置面板的注解參數(shù)中看到幾個(gè)默認(rèn)的注解:
場(chǎng)景 (Scene) 注解映射到當(dāng)前處于前臺(tái)的游戲場(chǎng)景;
加載狀態(tài) (LoadingState);
當(dāng)然,您也可以在上圖的界面里添加更多自定義注解參數(shù)。如果您集成了 C/C++ 的引擎,那么需要您用 Protocol Buffers 來(lái)定義這些注解:
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 中了解到更多關(guān)于使用 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è)置注解參數(shù)的值
隨后,您需要調(diào)用 APT 的 API 告知上下文發(fā)生了變化,參見(jiàn)上面的代碼。
完成 APT 庫(kù)的集成和注解參數(shù)配置后,您需要在 Google Cloud Console 中啟用 Android Performance Parameters API,這樣才能開(kāi)始收集玩家數(shù)據(jù)。參照下圖找到該 API 并啟用:
△?在 Google Cloud Console 中啟用 APT
游戲加載時(shí)間調(diào)優(yōu)
對(duì)于玩家來(lái)說(shuō),游戲的加載時(shí)間很大程度影響了他們?cè)陂e暇時(shí)間打開(kāi)游戲的意愿。有了 APT,您可以清楚地看到在不同設(shè)備、不同啟動(dòng)類(lèi)型下游戲加載時(shí)間的統(tǒng)計(jì)圖表: △?Android 性能調(diào)優(yōu)工具顯示的加載時(shí)間 如下圖所示,startRecordingLoadingTime 方法可以使用給定的事件元數(shù)據(jù)和注釋創(chuàng)建一個(gè)加載時(shí)間事件,并且將參數(shù)中的句柄 (handle) 設(shè)置為剛才創(chuàng)建的加載事件,便于后面使用 stopRecordingLoadingTime 方法結(jié)束時(shí)間記錄過(guò)程。 △?Android 性能調(diào)優(yōu)工具記錄加載時(shí)間的兩個(gè)函數(shù) 您一定要記得調(diào)用 stopRecordingLoadingTime 方法,它會(huì)結(jié)束此前啟動(dòng)的加載時(shí)間事件,暫存剛才記錄的結(jié)果,并于下一次會(huì)話清理時(shí)將事件記錄上傳到 Google Cloud 進(jìn)行統(tǒng)計(jì)分析。加載時(shí)間事件中包含了許多元數(shù)據(jù),可以幫助我們正確地區(qū)分不同場(chǎng)景下的加載時(shí)間,比如應(yīng)用首次冷啟動(dòng)、后臺(tái)轉(zhuǎn)前臺(tái)運(yùn)行、加載新關(guān)卡等。如果涉及到網(wǎng)絡(luò)加載,還會(huì)顯示加載的數(shù)據(jù)源和網(wǎng)絡(luò)類(lèi)型信息。參見(jiàn)圖中的結(jié)構(gòu)體定義:?
△Android 性能調(diào)優(yōu)工具中加載時(shí)間事件包含的元數(shù)據(jù)
除了提供上面的幾個(gè)注解,您還可以添加一些自定義的注解來(lái)幫助鎖定引起性能問(wèn)題的源頭。創(chuàng)建資源加載組也是一種不錯(cuò)的方法,比如,當(dāng)您的游戲從 CDN 下載資源時(shí),會(huì)形成大量可以單獨(dú)追蹤的下載任務(wù)和解壓任務(wù),為它們創(chuàng)建資源加載組可以很方便地分析這些任務(wù)執(zhí)行的性能表現(xiàn)。
這些組也可以添加注解,這樣您就可以看到造成特定場(chǎng)景加載緩慢的原因了。此時(shí)需要使用另一組方法,圖中給出的是啟動(dòng)記錄的方法 startLoadingGroup 的函數(shù)簽名:
△startLoadingGroup 函數(shù)簽名 當(dāng)您完成這些集成和調(diào)用后,耐心等待一段時(shí)間,Google Play 控制臺(tái)的 Android Vitals 中就將顯示這些加載時(shí)間的統(tǒng)計(jì)信息,比如:首次加載、冷加載、熱加載、關(guān)卡加載時(shí)間等等。您可以很方便地了解到用戶(hù)是否因?yàn)榧虞d時(shí)間過(guò)長(zhǎng),而失去耐心退出游戲,還可以深入了解哪些設(shè)備或者關(guān)卡可能遇到了問(wèn)題。
△在 Android Vitals 查看游戲加載時(shí)間統(tǒng)計(jì)信息
Android Vitals 也可以顯示幀率的統(tǒng)計(jì)信息,呈現(xiàn)方式非常類(lèi)似: △?在 Android Vitals 查看游戲幀率統(tǒng)計(jì)信息 您可以從中了解到哪些設(shè)備的性能不足以支撐游戲流暢運(yùn)行,哪些場(chǎng)景造成的幀率下降問(wèn)題最嚴(yán)重。有了這些信息,您就可以?xún)?yōu)先針對(duì)那些最需要調(diào)整優(yōu)化的用戶(hù)群進(jìn)行改進(jìn),讓您的游戲能在盡可能多的設(shè)備上暢玩。
覆蓋面和設(shè)備
最近我們?cè)?Google Play 控制臺(tái)提供了 "覆蓋面和設(shè)備 (Reach and devices)" 功能,它可以幫助您更好地了解游戲覆蓋的設(shè)備、國(guó)家區(qū)域以及在游戲生命周期內(nèi)的測(cè)試和優(yōu)化。您可以看到游戲的分布情況、安裝趨勢(shì)、崩潰率等統(tǒng)計(jì)信息,便于深入了解玩家和他們遇到的問(wèn)題。
△安裝分布和趨勢(shì)統(tǒng)計(jì)信息 您還可以從多個(gè)維度分析這些數(shù)據(jù),比如 SoC (System-on-Chip)、圖形 API (如 OpenGL 和 Vulkan) 等:
△從多種維度分析數(shù)據(jù) 您還可以用自己的游戲數(shù)據(jù)與同類(lèi)游戲的公開(kāi)數(shù)據(jù)進(jìn)行比較,從而發(fā)現(xiàn)新的開(kāi)發(fā)方向,在著手開(kāi)發(fā)下一版本之前做好充分的準(zhǔn)備。另外,針對(duì)國(guó)家/地區(qū)的過(guò)濾條件能幫助您精確制定發(fā)布和擴(kuò)張的計(jì)劃。最后,您還可以選擇導(dǎo)出這些統(tǒng)計(jì)數(shù)據(jù),點(diǎn)擊如圖所示的 "Export report" 即可:
△導(dǎo)出統(tǒng)計(jì)數(shù)據(jù)報(bào)告
Android GPU 檢查器
剛才我們從統(tǒng)計(jì)報(bào)告中基本確定了需要針對(duì)優(yōu)化的方面,那么該怎樣做呢?Android GPU 檢查器不僅能提供游戲運(yùn)行期間系統(tǒng)活動(dòng)、高頻硬件計(jì)數(shù)器的事件跟蹤記錄,還可以用類(lèi)似 systrace 的工具在時(shí)間軸上繪制出時(shí)間占用圖像。
Android GPU 檢查器在兩年前新增了對(duì) GPU 顯存信息的支持、使用 ANGLE 提供了 OpenGL ES 支持。在兼容了更多設(shè)備的同時(shí),也增加了幀檢查器 (Frame Profiler),它可以幫助您深入檢查單個(gè)渲染幀,查看分解后的渲染通道級(jí)別的時(shí)間信息。另外,幀檢查器還能幫您檢查分析包括紋理、幾何體、著色器、渲染管線在內(nèi)的多種 GPU 信息,從而分析某一幀內(nèi)進(jìn)行的各種 GPU 活動(dòng)。
△?Android GPU 檢查器的新功能
我們也正在與更多的設(shè)備制造商合作,希望能盡快為您提供更多的現(xiàn)有設(shè)備支持。
跨設(shè)備暢玩
截至目前,我們已經(jīng)實(shí)現(xiàn)了在更多的屏幕類(lèi)型上運(yùn)行您的游戲,試想這樣一個(gè)場(chǎng)景:您的玩家在下班路上掏出手機(jī)玩了一會(huì)兒游戲,到家后一陣忙碌,終于躺在沙發(fā)上,想要打開(kāi)平板接著玩。那么如何保證玩家可以在平板上繼續(xù)剛才手機(jī)上的游戲進(jìn)度呢?
Google Play 游戲 SDK 為您提供了便捷的方法實(shí)現(xiàn)剛才的場(chǎng)景。它可以讓玩家登錄,并保存和同步游戲進(jìn)度。這樣一來(lái),當(dāng)同一賬號(hào)在另一臺(tái)設(shè)備登錄時(shí),您的游戲就可以檢索并且取回服務(wù)器上的玩家數(shù)據(jù),讓他們可以直接從最后保存的時(shí)間點(diǎn)繼續(xù)進(jìn)行。同時(shí),您還可以集成一些熱門(mén)功能,比如游戲的成就系統(tǒng)、玩家排行榜等。
我們正在持續(xù)完善 Google Play 游戲服務(wù),它提供了一個(gè)更加簡(jiǎn)化的登錄 API,您可以在先行體驗(yàn)版的 SDK 中用一行代碼實(shí)現(xiàn)登錄功能,如下所示:
GamesSignInClient signInCli = PlayGames.getGamesSignInClient(this);signInCli.isAuthenticated().addOnCompleteListener(task -> { boolean isAuthenticated = task.isSuccessful() && task.getResult().isAuthenticated(); if (isAuthenticated) { // 繼續(xù)使用 Google Play 游戲服務(wù) }});△ 更新后的登錄 API (預(yù)覽版)
我們還計(jì)劃簡(jiǎn)化用戶(hù)賬戶(hù)的創(chuàng)建過(guò)程,當(dāng)他們安裝 Google Play 游戲應(yīng)用時(shí)就會(huì)順便創(chuàng)建個(gè)人資料了。這樣一來(lái),即使用戶(hù)還沒(méi)有安裝好 Google Play 游戲應(yīng)用,也能很快完成賬戶(hù)創(chuàng)建,然后回到游戲暢玩了。
△簡(jiǎn)化后的用戶(hù)賬戶(hù)設(shè)置過(guò)程
另外,我們正著力于進(jìn)一步簡(jiǎn)化自動(dòng)登錄流程,注冊(cè)過(guò)的用戶(hù)重新登錄會(huì)變得更加簡(jiǎn)單。從 2022 年開(kāi)始,用戶(hù)就不再需要先安裝 Google Play 游戲應(yīng)用才能使用 Play 游戲服務(wù)了。
△ 2022 年 Google Play 游戲的新變化
有了這些更新,全球的 20 億 Google Play 游戲用戶(hù)就可以零點(diǎn)擊登錄 Play 游戲服務(wù)了。
游戲模式
隨著越來(lái)越多玩家青睞移動(dòng)游戲,我們也致力于讓 Android 系統(tǒng)給游戲玩家和開(kāi)發(fā)者提供更多的便利。從 Android 12 開(kāi)始,部分設(shè)備將提供游戲模式 (Game Mode) API。這些 API 能讓設(shè)備按照用戶(hù)的需求提供極致的整機(jī)性能、平衡的性能或是最佳電池續(xù)航。而您前期為了適配各種設(shè)備對(duì)游戲所做的各項(xiàng)工作,剛好也可以用于響應(yīng)這些性能相關(guān)的用戶(hù)偏好。
另外,Pixel 6 之類(lèi)的設(shè)備還集成了新的游戲中心面板,它能以懸浮窗的方式為用戶(hù)提供游戲模式開(kāi)關(guān),以及幀率計(jì)數(shù)器和 YouTube 直播助手等游戲?qū)嵱霉ぞ摺?/p>
△ 邊下載邊玩功能
從 Android 12 開(kāi)始提供的 "邊下載邊玩" 功能可以減少玩家的等待時(shí)間,讓他們更快開(kāi)始游戲。為了支持這項(xiàng)功能,您需要使用 App Bundle 來(lái)提交游戲,并且需要避免使用一些舊版本的 Ads SDK。這是因?yàn)榕f版本的 Ads SDK 會(huì)在使用資源之前對(duì)其進(jìn)行分析,這類(lèi)行為會(huì)妨礙邊下載邊玩功能的實(shí)現(xiàn)。
總結(jié)
我們一起走過(guò)的漫漫長(zhǎng)路因?yàn)橛心膮⑴c而生機(jī)勃勃。我們非常感謝您對(duì) Android 游戲開(kāi)發(fā)事業(yè)的支持,同時(shí)希望能給您提供更好的支持。在這篇文章中,我們向您分享了 Android 游戲性能調(diào)優(yōu)的一些技巧,以及 Google Play 游戲服務(wù)的多項(xiàng)服務(wù)開(kāi)發(fā)者和玩家的改進(jìn)、基于性能調(diào)優(yōu)工具的 Android Vitals 分析面板。我們也希望這些新特性和改進(jìn),能讓玩家享受到更優(yōu)秀的游戲體驗(yàn),也能助力您更高效更輕松地開(kāi)發(fā)游戲作品!
-
Android
+關(guān)注
關(guān)注
12文章
3923瀏覽量
127136 -
API
+關(guān)注
關(guān)注
2文章
1485瀏覽量
61816 -
開(kāi)發(fā)套件
+關(guān)注
關(guān)注
2文章
152瀏覽量
24262
原文標(biāo)題:打造卓越的 Android 游戲體驗(yàn)
文章出處:【微信號(hào):Google_Developers,微信公眾號(hào):谷歌開(kāi)發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論