GMGC開發(fā)者訓(xùn)練營 蓋婭互娛研發(fā)技術(shù)總監(jiān)劉?。篗MORPG手游研發(fā)技術(shù)要點(diǎn)
Unity資源管理。Unity提供非常方便的資源管理機(jī)制,包括資源加載和卸載都有一整套的API。但Unity的資源管理和加載卸載有致命缺點(diǎn),它的資源卸載雖然方便,但并不智能,也不精細(xì),它的資源卸載是需要把所有的資源都檢查一遍,然后確定不用了以后才會(huì)去釋放,但這個(gè)檢查是非常耗時(shí)的。一個(gè)地圖的游戲會(huì)經(jīng)常加載和卸載各種各樣的資源,所以如果我說調(diào)用這種函數(shù)會(huì)造成非??ǖ母杏X,這是我們需要避免的地方。我們?cè)谫Y源管理方面是自己做的,生成assetbundle時(shí),把資源的依賴建立好存在文件里,加載的過程中會(huì)加載引用計(jì)數(shù),可以很快的加載和卸載資源,保障內(nèi)存的控制??赡艽蠹視?huì)想為什么Unity不好,因?yàn)閁nity的資源是可以循環(huán)引用的。大家知道循環(huán)引用是引用技術(shù)里最不能避免的一種問題,但其實(shí)我們?cè)谟螒蜷_發(fā)中很少會(huì)循環(huán)這種資源。Unity性能。UI要注意層級(jí)和模塊的劃分合理,很多的常用UI在隱藏時(shí)不要隱藏或者禁用,我們要移出攝像機(jī)的鏡頭,這樣回來時(shí)不會(huì)有這種激活問題。關(guān)注Overdraw,我們之前有策劃做UI用全透的底圖,但雖然是看不見的但也會(huì)有損耗。場(chǎng)景方面,根據(jù)小場(chǎng)景和大場(chǎng)景,這是靜態(tài)加載,靜態(tài)Batch還是動(dòng)態(tài)分塊加載,這種性能表現(xiàn)的比較好。在地圖上我們用LOD的辦法,讓大家在可以看到的范圍內(nèi)盡量減少渲染。角色方面控制面數(shù)和貼圖的質(zhì)量,大家想要一種在一起玩的感覺還是想要看到很多玩家在一起呢,所以要控制角色控制面數(shù)。Unity的動(dòng)畫文件很大。貼圖壓縮,在大家做手游的過程中,一定要使用跟平臺(tái)相關(guān)的壓縮原理,PVR很方便,但質(zhì)量很低,所以在UI不能用,安卓可以用ETCD,因?yàn)楝F(xiàn)在安卓平臺(tái)的支持廣泛的就是ETC1,但它的問題在于沒有貼圖,但我們我們還要修改。制作的過程中大家盡量保持一致,但在打包的過程中,大家需要做好打包的腳本根據(jù)不同的平臺(tái)壓縮不同的紋理,生成不同平臺(tái)的包。對(duì)象池和資源池,不是所有的資源不使用就要立即釋放,還有關(guān)于頻率和資源特性的策略,這樣不至于平臺(tái)的加載卸載消耗自己的網(wǎng)絡(luò)。在合適的地方主動(dòng)觸發(fā)GC和Unity的資源清理。清理LOG輸出和字符的串拼湊,有時(shí)候會(huì)造成CPU損耗。兩個(gè)工具,Unity Profiler、Frame Debugger,要檢查自己的性能到底損耗在哪里。UWA公司的文章非常干。
熱更新是手游領(lǐng)域必須具備的功能,我們要注意文件分布的合理性,單包不能太大,如果太大的時(shí)候加載會(huì)耗時(shí)。策劃配置是Lua,大部分的客戶端邏輯,場(chǎng)景和戰(zhàn)斗都是UI功能,所以Lua是熱更新的重點(diǎn)。我們需要有版本控制機(jī)制去更新,使用版本控制文件,我們所有的資源和Lua根據(jù)版本打成差異包,客戶端根據(jù)版本控制下載差異包。注意CDN緩存問題,很多重名的文件大家不要放在CDN上。域名劫持。
Lua,現(xiàn)在很多的框架都在用,但uLua是使用頻率最高的,一部分是Lua的虛擬家,還有就是C#與Lua的應(yīng)用。在一些非關(guān)鍵點(diǎn),我們可以先GC,在卡的時(shí)間比較長的時(shí)候,我們可以再完整GC。Lua使用有非常嚴(yán)重的問題是內(nèi)存泄露,主要的原因是Unity的Mono和Lua的虛擬家之間互相看不到,所以兩個(gè)虛擬機(jī)之間的對(duì)象相互引用的時(shí)候,沒有辦法回收釋放。一定要明確哪一些東西用,哪一些東西不用的。Lua性能,內(nèi)存占用,削減文件大小。Lua的執(zhí)行效率沒有問題,但它在Lua和C#相互調(diào)用的時(shí)候效率很低,我們?cè)陂_發(fā)的過程中把一些頻繁調(diào)用的模塊放在C#上,減少Lua與C#的相互調(diào)用。熱更新是所有手游都要具備的,熱更新里面最重要的就是使用Lua來連接。
MMORPG手游服務(wù)器的特點(diǎn)。在線實(shí)時(shí)交互,數(shù)據(jù)變動(dòng)頻繁響應(yīng)要求高,大部分的邏輯在服務(wù)器完成,防止作弊。因?yàn)槟阕龅氖虑閯e人也要看到,這樣才會(huì)有世界的感覺,服務(wù)器的邏輯非常復(fù)雜,對(duì)服務(wù)器邏輯的編寫要求高。手游領(lǐng)域要注意網(wǎng)絡(luò)的穩(wěn)定性,網(wǎng)絡(luò)切換也會(huì)引起斷線,所以斷線的體驗(yàn)要做到無縫和舒適,要有離線的網(wǎng)絡(luò)機(jī)制,這樣離線了整個(gè)隊(duì)伍可以繼續(xù)玩,這是比較好的。代碼和配置支持熱加載,因?yàn)镸MO系統(tǒng)很多,上線的測(cè)試比較短可能會(huì)遺留一些漏洞,如果在現(xiàn)場(chǎng)爆發(fā)出來對(duì)游戲的口碑造成很大的傷害,所以我們要支持在線解決一些漏洞的問題。開服一段時(shí)間以后,要有跨服和合服的機(jī)制。
各大游戲廠商服務(wù)器框架基本類似,大部分都會(huì)有網(wǎng)端服務(wù)器,這是服務(wù)客戶端進(jìn)行通信的。游戲服務(wù)器負(fù)責(zé)網(wǎng)絡(luò)協(xié)議模塊和數(shù)據(jù)庫模塊,綠色的部分是游戲里面比較重要的工作,邏輯部分,包括場(chǎng)景,戰(zhàn)斗、屬性、物品等各種各樣的東西。會(huì)有公共的服務(wù)器來負(fù)責(zé)賬號(hào)和登錄,以及充值唯一名服務(wù)器用來保證名字。其它的部分主要看各團(tuán)隊(duì)熟悉什么,有自己編寫的,也有引進(jìn)的。
網(wǎng)絡(luò)層有PCP、UDP、WebSocket、Http。協(xié)議層的主要功能是定義文件,客戶端的服務(wù)器生成協(xié)議代碼,發(fā)送接受協(xié)議,序列化和反序列化。網(wǎng)絡(luò)層和協(xié)議層比較好的開源。數(shù)據(jù)庫,多線程,利用CPU多核能力。支持事務(wù),發(fā)生未知錯(cuò)誤時(shí)保持?jǐn)?shù)據(jù)完整。單服的讀寫功能是我們最關(guān)注的,支持合服和跨服。
打包和測(cè)試是MMO游戲研發(fā)到上線的最后一個(gè)環(huán)節(jié),這個(gè)環(huán)節(jié)的效率和時(shí)間消耗可以保證游戲是否能夠正常上線,或者說上線之前是否要通宵熬夜。不管是代碼還是資源配置都需要SVN管理的,這分為開發(fā)版本和線上版本的分支。平時(shí)會(huì)在開發(fā)版本提交,但提交時(shí)需要有任務(wù)單號(hào)和漏洞,我們?cè)谌蝿?wù)和漏洞測(cè)試通過以后會(huì)把它挑出來合并到線上分支,這是半自動(dòng)化的過程非常方便。合并完分支后可以自動(dòng)化制作游戲包,相信大家會(huì)使用Jenkins的工具,看使用Unity還是自己的框架來寫這些工具。如果使用Unity為了減少打包過程中的時(shí)間,建議對(duì)資源差異處理精細(xì),不要重新導(dǎo)入打包。測(cè)試非常辛苦,研究研究自動(dòng)化測(cè)試工具,基于操作的測(cè)試工具,基于Unity的測(cè)試工具,基于Lua腳本的測(cè)試工具,Lua是非常方便的腳本語言,目標(biāo)是讓測(cè)試人員很方便地寫出自動(dòng)化測(cè)試,減少測(cè)試中的工作量。機(jī)型適配測(cè)試,剛開始做手游會(huì)買很多設(shè)備自己做適配,但現(xiàn)在一方面引擎的通用化,受益于很多云測(cè)試平臺(tái)可以方便準(zhǔn)確地測(cè)試出游戲在安卓平臺(tái)上的適配率。
仙劍的項(xiàng)目我們一直在摸索和學(xué)習(xí),希望與大家一起探討完善,能夠給玩家提供更好的體驗(yàn),謝謝大家。
關(guān)于GMGC:
GMGC成立于2012年9月,是全球第三方移動(dòng)游戲行業(yè)組織,目前在全球擁有30多個(gè)國家或地區(qū)近300名會(huì)員企業(yè),成員中包含開發(fā)商、發(fā)行商、服務(wù)商、投資商等。GMGC秉持“共建共享,合作共贏”的理念,為產(chǎn)業(yè)上下游企業(yè)搭建合作、交流、學(xué)習(xí)的平臺(tái),促進(jìn)產(chǎn)業(yè)共同發(fā)展。
由GMGC主辦的全球游戲大會(huì)(GMGC北京)、全球游戲開發(fā)者大會(huì)暨天府獎(jiǎng)盛典(GMGC成都)、亞洲移動(dòng)游戲大會(huì)(GMGC馬尼拉)、中國(昆山)數(shù)字娛樂節(jié)(GMGC昆山)每年分別在北京、成都、上海、深圳、昆山乃至亞洲各大城市舉辦,上述活動(dòng)已經(jīng)發(fā)展成為業(yè)界最具規(guī)模和影響力的行業(yè)盛會(huì),產(chǎn)業(yè)風(fēng)向標(biāo)。同時(shí),GMGC還提供全方位的專屬會(huì)員的服務(wù)項(xiàng)目,如創(chuàng)新沙龍、全球商務(wù)考察、CEO晚餐會(huì)、GMGC之夜等商務(wù)社交活動(dòng),幫助中外會(huì)員企業(yè)拓展業(yè)務(wù)及建立更多的伙伴關(guān)系并促進(jìn)發(fā)展。
- 更多推薦:
- 網(wǎng)易云攜游戲解決方案亮相GMGC,斬獲最佳服務(wù)商獎(jiǎng)項(xiàng) GMGC·成都·2018 | 獨(dú)立游戲開發(fā)者大賽落幕 《彩虹墜入》殺出重圍 險(xiǎn)勝折桂 GMGC·成都·2018 | OPPO小游戲商務(wù)負(fù)責(zé)人劉漢揚(yáng):對(duì)于即點(diǎn)即玩的小游戲 我們想做更多事情 GMGC·成都·2018 | vivo小游戲商務(wù)負(fù)責(zé)人程文杰:小游戲用戶大部分非傳統(tǒng)手游用戶 是增量市場(chǎng) GMGC·成都·2018 |育碧成都工作室李濟(jì)瀟:創(chuàng)造生機(jī)盎然的虛擬世界 GMGC·成都·2018 | 三七互娛海外負(fù)責(zé)人彭美:海外市場(chǎng)開拓的殺招—內(nèi)容整合式營銷 GMGC·成都·2018 第七屆全球移動(dòng)游戲開發(fā)者大會(huì)正式開幕 GMGC·成都·2018 | Google Play趙伊江: 東南亞核心打法 不要只顧買量 要多渠道整合
