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