這幾天去廈門參加了VALSE2017會(huì)議,對(duì)于其中某個(gè)環(huán)節(jié)展示的有關(guān)增強(qiáng)現(xiàn)實(shí)游戲的部分印象深刻。因?yàn)榍皟赡暌欢瘸撩杂诶酶黝愐骈_發(fā)游戲,所以也曾經(jīng)以Pokemon GO為模板開發(fā)過一款多平臺(tái)增強(qiáng)現(xiàn)實(shí)網(wǎng)絡(luò)游戲,作為當(dāng)時(shí)的校內(nèi)實(shí)習(xí)項(xiàng)目,現(xiàn)在好像利用增強(qiáng)現(xiàn)實(shí)技術(shù)開發(fā)游戲已經(jīng)成為一個(gè)流行的方向了,所以就把當(dāng)時(shí)總結(jié)報(bào)告中的一些內(nèi)容貼出來,作為一種開發(fā)方案,希望能幫助到一些游戲開發(fā)者。

開發(fā)需求

    隨著Hololens等增強(qiáng)現(xiàn)實(shí)設(shè)備的誕生,各大科技巨頭吹響了進(jìn)軍增強(qiáng)現(xiàn)實(shí)領(lǐng)域的號(hào)角,增強(qiáng)現(xiàn)實(shí)技術(shù)的熱門一方面是因?yàn)槠湓诩夹g(shù)上的開拓性思路,更是因?yàn)橐栽鰪?qiáng)現(xiàn)實(shí)技術(shù)為基礎(chǔ)的應(yīng)用往往完美地結(jié)合了科技性與娛樂性。前段時(shí)間非?;鸨腜okemon GO就是一個(gè)非常好的例子。通過實(shí)際開發(fā)來學(xué)習(xí)、研究增強(qiáng)現(xiàn)實(shí)開發(fā)技術(shù),將增強(qiáng)現(xiàn)實(shí)技術(shù)結(jié)合到實(shí)際應(yīng)用之中,讓用戶得到如Pokemon GO般良好的交互體驗(yàn),就是此項(xiàng)目的開發(fā)需求。值得一提的是,在此項(xiàng)目開發(fā)前期,由于預(yù)想將其輸出至Hololens平臺(tái),所以我完整閱讀、學(xué)習(xí)了Hololens Academy上的內(nèi)容,開發(fā)了一個(gè)demo,之后由于機(jī)器問題,故轉(zhuǎn)而選擇發(fā)布到安卓平臺(tái),并針對(duì)安卓平臺(tái)進(jìn)行了開發(fā),目標(biāo)實(shí)現(xiàn)類似于Pokemon GO的游戲交互體驗(yàn)。另外,由于主題是基于增強(qiáng)現(xiàn)實(shí)技術(shù)的可視化內(nèi)容智能生成應(yīng)用,所以我在開發(fā)過程中還保證所用到的有關(guān)增強(qiáng)現(xiàn)實(shí)的技術(shù)是可拓展,可移植的,例如需要開發(fā)一個(gè)以家庭場(chǎng)景為環(huán)境的增強(qiáng)現(xiàn)實(shí)交互系統(tǒng),那么就可以直接使用該項(xiàng)目中所使用到的解決方案。

模塊設(shè)計(jì)方案

    在本應(yīng)用的設(shè)計(jì)架構(gòu)中,核心是基于增強(qiáng)現(xiàn)實(shí)的捕捉收集體驗(yàn)與聯(lián)網(wǎng)對(duì)戰(zhàn),圍繞此核心設(shè)計(jì)了數(shù)個(gè)模塊,包括主界面模塊,聯(lián)網(wǎng)游戲模塊,單機(jī)游戲模塊,圖鑒模塊,捕捉模塊,網(wǎng)絡(luò)傳輸模塊,裝備模塊,商城模塊。另外在這些模塊初步開發(fā)完成后,我又進(jìn)行了對(duì)象緩沖池的開發(fā),以期提高運(yùn)行效率。

    設(shè)計(jì)架構(gòu)圖示如下:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

詳細(xì)技術(shù)實(shí)現(xiàn)

 

主界面模塊

    主界面模塊也就是該應(yīng)用的初始界面,開發(fā)上所使用到的技術(shù)主要是UGUI技術(shù),同時(shí)也有一些非常簡(jiǎn)單的網(wǎng)絡(luò)傳輸技術(shù),用來更新游戲公告欄信息等。

    該模塊實(shí)際運(yùn)行效果如下:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

單機(jī)游戲模塊

    單機(jī)游戲模塊也就是當(dāng)玩家選擇單機(jī)游戲時(shí)進(jìn)入的主界面,這個(gè)界面上主要運(yùn)用到了基于C#的Unity腳本技術(shù),MAYA建模以及UGUI開發(fā)技術(shù)。

    C#腳本主要是用來控制UI中的各類控件的動(dòng)態(tài)更新,以及實(shí)現(xiàn)動(dòng)態(tài)背景(背景三維場(chǎng)景實(shí)現(xiàn)了隨機(jī)動(dòng)態(tài)變化以及通過手指移動(dòng)觀看場(chǎng)景的不同區(qū)域)。

    MAYA建模主要負(fù)責(zé)搭建場(chǎng)景中的各類模型,例如行星等。

    UGUI開發(fā)技術(shù)主要用來實(shí)現(xiàn)該場(chǎng)景中的各類UI。

    該模塊實(shí)際運(yùn)行效果如下:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn) 大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

商城模塊

    商城模塊主要涉及的是與全局管理代碼的交互及UGUI開發(fā),通過與全局管理代碼的交互來實(shí)現(xiàn)購(gòu)買功能,通過UGUI來構(gòu)建一個(gè)經(jīng)典的商城頁面,并且活用各類控件美化界面,優(yōu)化功能。

    該模塊實(shí)際運(yùn)行效果如下:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

圖鑒模塊&裝備模塊

    圖鑒模塊及裝備模塊的技術(shù)實(shí)現(xiàn)方式與商城類似,這兩個(gè)模塊的實(shí)際運(yùn)行效果如下:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

捕捉模塊

    捕捉模塊主要負(fù)責(zé)的就是實(shí)現(xiàn)捕捉游戲中的外星人的功能,具體來說涉及到的就是根據(jù)特定的圖像智能生成特定的三維模型,這個(gè)三維模型是具有增強(qiáng)現(xiàn)實(shí)屬性的,也就是說,當(dāng)我們移動(dòng)攝像頭時(shí),三維模型會(huì)像實(shí)際存在于真實(shí)世界那樣以自然逼真的方式改變自己在可視化內(nèi)容中的角度與尺寸,另外,用戶還可以通過手指點(diǎn)擊,滑動(dòng)以發(fā)射游戲中的太空艙與外星人進(jìn)行交互,當(dāng)太空艙與外星人形成碰撞時(shí)有概率完成捕捉。

    在開發(fā)這個(gè)模塊時(shí),我遇到了一個(gè)難題,就是特定圖像的識(shí)別問題。我使用了一款性能比較優(yōu)秀的SDK——Vuforia,它可以將識(shí)別圖片的功能整合進(jìn)Unity3D應(yīng)用,并且通過其強(qiáng)大的服務(wù)器實(shí)時(shí)處理傳入的圖像并返回結(jié)果值。

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

    在實(shí)現(xiàn)增強(qiáng)現(xiàn)實(shí)方面,我所做的工作主要是控制模型的生成,移動(dòng),攻擊,消失以及當(dāng)攝像頭移動(dòng)時(shí)真實(shí)的模型狀態(tài)變換方式,這些都是通過C#腳本來實(shí)現(xiàn)的。

    在實(shí)現(xiàn)交互方面,主要要實(shí)現(xiàn)的就是通過手指的點(diǎn)擊與移動(dòng)來實(shí)現(xiàn)太空艙的拋射,控制太空艙的角度與速度,以及撞擊外星人時(shí)檢測(cè)碰撞并完成捕捉。

    該模塊的實(shí)際運(yùn)行效果如下:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn) 大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

聯(lián)網(wǎng)游戲模塊

    在這個(gè)應(yīng)用中,聯(lián)網(wǎng)對(duì)戰(zhàn)功能也是非常關(guān)鍵的一環(huán),很多時(shí)候一款游戲的聯(lián)網(wǎng)對(duì)戰(zhàn)功能可以直接決定游戲的娛樂性和競(jìng)技性。在本應(yīng)用中,我主要使用了以下三項(xiàng)技術(shù)實(shí)現(xiàn)了聯(lián)網(wǎng)對(duì)戰(zhàn)的功能:

 

網(wǎng)絡(luò)視圖(Network View

    網(wǎng)絡(luò)視圖在Unity3D引擎中以組件形式發(fā)揮作用,當(dāng)開發(fā)者需要使某個(gè)游戲?qū)ο蟪蔀榫W(wǎng)絡(luò)對(duì)象(在聯(lián)網(wǎng)游戲中在每個(gè)用戶和服務(wù)器上都實(shí)時(shí)更新的對(duì)象)時(shí),首先需要為其添加網(wǎng)絡(luò)視圖組件,這是后續(xù)開發(fā)的基礎(chǔ),通過這個(gè)組件衍生出來的功能強(qiáng)大而繁多,幾乎可以實(shí)現(xiàn)網(wǎng)絡(luò)游戲所需要的所有網(wǎng)絡(luò)功能,在本應(yīng)用中,所有網(wǎng)絡(luò)對(duì)象都含有此組件。

 

狀態(tài)同步

    網(wǎng)絡(luò)視圖實(shí)時(shí)收發(fā)已經(jīng)設(shè)置為Observed的組件信息,當(dāng)開發(fā)者自定義需要共享的數(shù)據(jù)或數(shù)據(jù)組時(shí),就需要在腳本中定義回調(diào)函數(shù):OnSerializeNetworkView(),在此函數(shù)中開發(fā)讀寫網(wǎng)絡(luò)數(shù)據(jù)的各類邏輯,這就是狀態(tài)同步技術(shù)的作用,在本應(yīng)用中是控制網(wǎng)絡(luò)數(shù)據(jù)傳輸邏輯的核心。

 

遠(yuǎn)程過程調(diào)用(RPC

    RPC針對(duì)的是物理隔絕的不同設(shè)備上的函數(shù),使用RPC可以通過網(wǎng)絡(luò)調(diào)用其他玩家腳本中的函數(shù),例如,在一款網(wǎng)絡(luò)射擊類游戲中,玩家在本地調(diào)用了開槍函數(shù),那么網(wǎng)絡(luò)中別的玩家端也應(yīng)同時(shí)調(diào)用相應(yīng)網(wǎng)絡(luò)對(duì)象的開槍函數(shù),這時(shí)候就需要使用到RPC了,在本應(yīng)用中,RPC負(fù)責(zé)實(shí)現(xiàn)開火,動(dòng)態(tài)改變角色動(dòng)畫等保證游戲性的重要功能。

 

    本模塊實(shí)際運(yùn)行如下所示:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn) 大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

對(duì)象緩沖池

    由于該應(yīng)用的特征,在一些時(shí)候,同一場(chǎng)景中會(huì)使用大量的模型與各類粒子特效等,這樣雖然會(huì)使得應(yīng)用的效果更加精彩,但是同時(shí)也必然會(huì)導(dǎo)致頻繁的創(chuàng)建、克隆、銷毀對(duì)象,這就很大程度地消耗了大量的計(jì)算資源,使得應(yīng)用出現(xiàn)卡頓現(xiàn)象。這時(shí)候在應(yīng)用開發(fā)領(lǐng)域有一種經(jīng)典的方法:將需要用到的游戲?qū)ο笈c粒子系統(tǒng)等提前加載到一個(gè)池中,然后需要的時(shí)候再直接從池中取得,用完再放回以便下一次取得,避免使用的時(shí)候進(jìn)行大量重復(fù)的克隆工作,影響系統(tǒng)效率,更具體地說,“取得”和“放回”的過程實(shí)際上就是對(duì)已加載的游戲?qū)ο筮M(jìn)行啟用和禁用的過程。這種方法就是“對(duì)象緩沖池”方法。當(dāng)我將這種技術(shù)運(yùn)用到這個(gè)應(yīng)用的子彈等對(duì)象的生成與銷毀中時(shí),我發(fā)現(xiàn)確實(shí)明顯提高了應(yīng)用運(yùn)行時(shí)的流暢性。

全局管理器

    全局管理器主要是由C#腳本及其中的靜態(tài)變量組成,我開發(fā)全局管理器的主要目的是使得應(yīng)用的結(jié)構(gòu)更加清晰,當(dāng)需要對(duì)應(yīng)用中某些功能進(jìn)行更改時(shí)更加便捷,安全。這也是在實(shí)際開發(fā)過程中非常常用的一種技術(shù)。

    以上內(nèi)容由于主要是利用Unity3D引擎開發(fā)游戲,所以代碼上沒有什么特別難的地方,所以涉及到的一些腳本也暫時(shí)就不開源了。這篇文章中所介紹的主要是這種開發(fā)方案的框架,由于Unity3D本身支持多平臺(tái)輸出,所以依托這樣一個(gè)方案就可以開發(fā)出一個(gè)最基本的類似Pokemon GO的多平臺(tái)增強(qiáng)現(xiàn)實(shí)網(wǎng)絡(luò)游戲。

備注:本人非常樂意分享我的文章,轉(zhuǎn)載請(qǐng)注明我的博客地址:http://www.cnblogs.com/matthewli/與原文地址:http://www.cnblogs.com/matthewli/p/6759275.html,謝謝!

http://www.cnblogs.com/matthewli/p/6759275.html