騰訊游戲分享匯:天天飛車(chē)六大研發(fā)經(jīng)驗(yàn)(3)
2014-08-20 11:06:36來(lái)源:優(yōu)游網(wǎng)發(fā)布:優(yōu)游網(wǎng)
編譯為IL中間代碼,以JIT模式在mono虛擬機(jī)中運(yùn)行的,所以一旦C#層出現(xiàn)異常,RQD報(bào)上來(lái)的調(diào)用棧反映的都是虛擬機(jī)自身發(fā)生了異常,無(wú)法定位異常發(fā)生的具體位置,然而Android崩潰率大大高于iOS,是需要更多關(guān)注的。
后來(lái)通過(guò)猜測(cè)和試驗(yàn),我們發(fā)現(xiàn)其實(shí)在C#層產(chǎn)生異常時(shí),Unity可以通過(guò)回調(diào)的方式把異常類(lèi)型和調(diào)用棧告知應(yīng)用,這正是我們需要的,但如何把這些信息上報(bào)又成了問(wèn)題,因?yàn)橐坏㏑QD捕捉到異常就會(huì)立即kill掉應(yīng)用,可能應(yīng)用都沒(méi)有機(jī)會(huì)處理這些信息,我們把情況反饋給了RQD的研發(fā)組,但短時(shí)間內(nèi)他們也很難有比較完善而系統(tǒng)的解決方案。后來(lái)通過(guò)和RQD開(kāi)發(fā)同事不斷的探討終于找到了一種看起來(lái)簡(jiǎn)陋但卻行之有效的方案:由他們提供一個(gè)發(fā)生異常時(shí)延遲kill掉進(jìn)程的定制版本,在異常發(fā)生時(shí)我們把需要額外上報(bào)的異常信息以追加的方式寫(xiě)入會(huì)上報(bào)的tomb文件。采用這種方法,我們所需的C#異常信息在Android平臺(tái)也能有效地通過(guò)RQD上報(bào)了,而且能在后臺(tái)頁(yè)面比較方便的查看。
安裝包容量縮減方案分享,多種方法協(xié)力顯功效
天天飛車(chē)屬于最早那一兩批上線的微信/手Q游戲,為了盡量降低玩家進(jìn)入的門(mén)檻,當(dāng)時(shí)對(duì)安裝包體積的要求還是蠻嚴(yán)格的,至少要控制到40M以下,而當(dāng)時(shí)我們的安裝包體積已經(jīng)突破50M了。
第一步,我們還是檢查梳理了一遍資源,看看有沒(méi)有資源沒(méi)按照規(guī)范來(lái)制作,有沒(méi)有資源是冗余的,這應(yīng)該是最基本的,這項(xiàng)工作的一部份可以通過(guò)自動(dòng)化的工具來(lái)完成,利用Unity提供的編輯器擴(kuò)展接口來(lái)實(shí)現(xiàn)還是很方便的。
我們分析過(guò)安裝包的具體構(gòu)成,其實(shí)還是貼圖資源占比最大,所以很自然地應(yīng)用了TinyPNG之類(lèi)的減色工具來(lái)減少貼圖的信息量,實(shí)際結(jié)果表明這個(gè)優(yōu)化對(duì)決大多數(shù)貼圖表現(xiàn)的影響都是可以接受的,僅有少量的UI貼圖需要區(qū)別對(duì)待一下。
渲染中文字符所使用的矢量字體文件ttf的體積對(duì)于手游安裝包來(lái)說(shuō)實(shí)在是有點(diǎn)大,一個(gè)最基本的優(yōu)化手段就是使用精簡(jiǎn)字庫(kù),但精簡(jiǎn)過(guò)渡又會(huì)導(dǎo)致很多字符無(wú)法正常渲染,所以最后依然會(huì)占用5M左右的空間,當(dāng)時(shí)的一個(gè)想法就是可否直接把移動(dòng)設(shè)備操作系統(tǒng)的字體文件拿來(lái)用,感謝iOS這個(gè)封閉的系統(tǒng),字庫(kù)很統(tǒng)一,這個(gè)方案確實(shí)是可行的,游戲首次運(yùn)行時(shí)通過(guò)系統(tǒng)API直接從系統(tǒng)字庫(kù)提取出字形信息組裝成了ttf文件,但Android系統(tǒng)就不行了,各種系統(tǒng)版本字庫(kù)五花八門(mén),只能還是老實(shí)地把精簡(jiǎn)字體文件打進(jìn)安裝包。
還有一個(gè)大頭是在音頻上,在PC端上游戲音頻一般直接采用mp3/ogg等流行的壓縮格式就可以了,但終端設(shè)備尤其是安卓設(shè)備很多不具備音頻的硬件解碼能力,CPU運(yùn)算能力又相對(duì)較弱,在做性能分析的時(shí)候發(fā)現(xiàn),一些中低端設(shè)備,甚至某些比較高端的設(shè)備,在音頻解壓這一塊都有相當(dāng)大的性能消耗。為了流暢的幀率我們最初不得不采用非壓縮的wav格式。但問(wèn)題很明顯,非壓縮格式的音頻文件體積太大了,因?yàn)樾畔⒘刻貏e大,打進(jìn)安裝包里也縮減不了太多。后來(lái)我們采取了一個(gè)兩全其美的方案,安裝包里依然存放壓縮格式的音頻,游戲第一運(yùn)行時(shí),把音頻解壓成非壓縮格式來(lái)播放,這塊當(dāng)時(shí)節(jié)省了8M多空間。
經(jīng)過(guò)這些努力,我們的首發(fā)安裝包體積成功的控制在了30M的水平,但需要注意的是蘋(píng)果會(huì)對(duì)可執(zhí)行文件加密,這會(huì)導(dǎo)致AppStore中的版本會(huì)比提交審核的原始包大一些.手游與省電似乎天生存在矛盾,小技巧暗藏客觀效果與普通的App相比,手游耗電確實(shí)要厲害得多,大家也都比較關(guān)注這一塊,影響手機(jī)耗電的因素很多,CPU的占用率,GPU的運(yùn)算量,屏幕的亮度,網(wǎng)絡(luò)模式和通訊量等等,都會(huì)影響到電量消耗的快慢,然而手機(jī)網(wǎng)游是這些硬件資源的消耗大戶,而且消耗的更多往往就能給用戶帶來(lái)更絢麗的表現(xiàn),更流暢的操作體驗(yàn)。
一方面,我們要做好游戲的性能優(yōu)化,這是最基礎(chǔ)的,因?yàn)檫@樣就能以更少的硬件資源消耗帶來(lái)基本相同的游戲體驗(yàn),另一方面,我們也可以采取一些小策略,小技巧來(lái)達(dá)到相對(duì)省電的效果,比方說(shuō)我們將游戲刷新率最高限制在了30幀,因?yàn)檫@對(duì)于天天飛車(chē)這種類(lèi)型的3D游戲的流暢體驗(yàn)來(lái)說(shuō)基本足夠了,又比如在大廳里面掛機(jī)或者暫停游戲的時(shí)候, 其實(shí)不需要保持比較高的刷新率,這時(shí)候就完全可以把幀率降下來(lái),自然而然就獲得了省電的效果。當(dāng)然這只是兩個(gè)很小的例子,具體游戲可以根據(jù)自身情況仔細(xì)挖掘,
相關(guān)閱讀
- 08-20 ·放大版三星galaxy s4!三星note3拍攝樣張曝光
- 08-20 ·LG發(fā)布全球最薄1080p顯示屏 厚度僅2.2mm
- 08-20 ·柯達(dá)Instamatic概念手機(jī):更像是一款相機(jī)
- 08-20 ·傳摩托羅拉X Phone將支持手勢(shì)控制拍照功能
- 08-20 ·騰訊代理《植物大戰(zhàn)僵尸2》中文版實(shí)機(jī)試玩演示
- 08-20 ·英雄大戰(zhàn)僵尸《迷你英雄:僵尸2》血腥再現(xiàn)
- 08-20 ·另類(lèi)塔防對(duì)戰(zhàn)游戲《像素戰(zhàn)爭(zhēng)》演繹暴力藝術(shù)
- 08-20 ·國(guó)產(chǎn)跑酷游戲的奇葩《跑酷三國(guó)》彰顯時(shí)代個(gè)性
- 08-20 ·ios神作降臨搶先體驗(yàn)《植物大戰(zhàn)僵尸2》評(píng)測(cè)
- 08-20 ·TYLT VU無(wú)線充電器:帶來(lái)更高效充電效果