• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      PUN多人網(wǎng)絡(luò)游戲的設(shè)計(jì)與實(shí)現(xiàn)

      2020-09-05 08:23:23魏菊霞

      魏菊霞

      【摘 要】在游戲程序開(kāi)發(fā)過(guò)程中,學(xué)生普遍對(duì)多人游戲的開(kāi)發(fā)產(chǎn)生畏懼心理,而Unity公司的Photon Unity Networking(PUN)多人游戲插件包,功能強(qiáng)大,非常方便的為學(xué)生提供了一種解決方案,增強(qiáng)了學(xué)生的學(xué)習(xí)興趣。

      【關(guān)鍵詞】多人游戲;PUN;游戲大廳;Unity

      Photon 是德國(guó)Exit Games公司開(kāi)發(fā)的高效、穩(wěn)定、可拓展的網(wǎng)絡(luò)引擎。為當(dāng)前世界上用戶最廣泛,支持游戲類型最多的專業(yè)網(wǎng)絡(luò)引擎之一。也是Unity3D應(yīng)用商店里用戶評(píng)價(jià)最高的網(wǎng)絡(luò)組件之一。而Photon Unity Networking(簡(jiǎn)稱PUN)則是一個(gè)基于Unity的多人游戲插件包。

      1 游戲大廳的創(chuàng)建

      1.1 房間與游戲大廳

      PhotonCloud被構(gòu)建用來(lái)做“room-based gamse”,即基于房間的游戲時(shí),每次匹配有限數(shù)量的玩家,這些玩家是與其他房間的玩家分開(kāi)的。通常情況下在一個(gè)房間里面的每一個(gè)玩家都會(huì)接受到其他玩家發(fā)送的任何信息。房間外的玩家則不能溝通,所有我們總數(shù)想要盡快加入房間。加入一個(gè)房間最好的方式就是使用隨機(jī)匹配。我們只需要請(qǐng)求服務(wù)器任何房間或帶特定屬性的房間即可。所有的房間都有一個(gè)名稱作為標(biāo)識(shí)符。除非房間已滿或被關(guān)閉了,我們可以通過(guò)名稱來(lái)加入房間。為了方便玩家,主服務(wù)器可以為我們的應(yīng)用程序提供一個(gè)房間列表。

      制作的游戲程序應(yīng)用的大廳存在于主服務(wù)器上,大廳中為游戲列出房間。如果不使用大廳,有可用的房間就會(huì)簡(jiǎn)單地隨機(jī)加入一個(gè)房間,如果因?yàn)榉块g滿員等的原因沒(méi)有可用的房間可以加入,則創(chuàng)建一個(gè)新的房間。

      1.2. 連接到服務(wù)器、房間訪問(wèn)和創(chuàng)建

      為了能夠連接到Photon云服務(wù)器,并且加入一個(gè)房間。需要?jiǎng)?chuàng)建一個(gè)新場(chǎng)景Laucher.uniry,新腳本Laucher,并掛載到場(chǎng)景的游戲?qū)ο笊稀aucher可以參考官方腳本以進(jìn)行大廳的創(chuàng)建和連接。

      關(guān)于命名空間,雖然命名空間不是強(qiáng)制性的,給予你的腳本適當(dāng)?shù)膎amespace可以防止與其他資源和開(kāi)發(fā)者沖突,如果Unity報(bào)錯(cuò),所有的開(kāi)發(fā)人員將不得不為Unity重命名類,以允許執(zhí)行該項(xiàng)目。如果沖突來(lái)自資源商店下載的資源,會(huì)非常棘手。

      2 創(chuàng)建玩家Player

      2.1玩家預(yù)制體

      PUN中最重要的一個(gè)約定,預(yù)設(shè)體Perfab需要在網(wǎng)絡(luò)上被實(shí)例化,它需要被放在Resources文件夾中,否則就不會(huì)被找到。第二重要的,在Resources文件夾中需要注意預(yù)設(shè)的名字,Resource資源路徑中不應(yīng)該有命名相同的預(yù)設(shè)體,Unity會(huì)使用找到的第一個(gè)。

      在通常情況下,玩家攝像機(jī)總是跟隨玩家。但是當(dāng)你連接到一個(gè)滿是玩家的房間中時(shí),每個(gè)玩家上的CameraWork腳本都會(huì)努力控制主攝像機(jī)來(lái)看向自己的玩家。為了不出現(xiàn)這種情況,可以控制腳本行為,并根據(jù)是否是本地玩家來(lái)進(jìn)行跟隨,或者將腳本依附在相機(jī)上并時(shí)刻注意場(chǎng)景中的本地玩家實(shí)例,然后只跟隨本地玩家。

      2.2 網(wǎng)絡(luò)預(yù)制體

      首先需要在預(yù)設(shè)上添加一個(gè)PhotonView組件。該組件用于將不同的實(shí)例在每臺(tái)電腦上連接起來(lái)。

      在多人游戲中我們需要同步一個(gè)的明顯特征是角色的位置和旋轉(zhuǎn),這樣當(dāng)一個(gè)玩家移動(dòng)時(shí),其他計(jì)算機(jī)上的其他玩家代表以同樣的方式移動(dòng)和旋轉(zhuǎn)。由于網(wǎng)絡(luò)延遲和數(shù)據(jù)同步的有效性,角色上的Transform組件會(huì)有其他問(wèn)題。而PhotonTransformView組件可以使這個(gè)共同任務(wù)更容易,作為Transform組件和PhotonView之間的中間人。基本上,這個(gè)組件可以解決所要做的所有難點(diǎn)。

      PhotonAnimatorView組件適用于進(jìn)行動(dòng)畫同步,它允許開(kāi)發(fā)者定義哪些層權(quán)重和哪些參數(shù)要同步。層權(quán)重只需要在游戲中發(fā)生改變時(shí)同步,有可能逃脫而完全沒(méi)有同步。參數(shù)也一樣。有時(shí)它可能從其他因素中獲得動(dòng)畫值。一個(gè)速度值是一個(gè)很好的例子,不需要精確地同步這個(gè)值,可以使用同步位置更新來(lái)估計(jì)它的值。如果可能的話,盡量少同步參數(shù)。

      在組件中的Discrete synchronization即離散同步意味著一個(gè)值每秒被發(fā)送10次。接受客戶端的值傳遞給本地的動(dòng)畫。而Continuous連續(xù)同步意味著PhotonAnimatorView每幀運(yùn)行。當(dāng)OnPhotonSerializeView被調(diào)用,該值自從上次被調(diào)用就開(kāi)始記錄,在一起發(fā)送。接收客戶端然后按序列應(yīng)用這些值,以保持平穩(wěn)過(guò)渡。雖然這個(gè)模式是平滑的,它也發(fā)送更多的數(shù)據(jù)來(lái)實(shí)現(xiàn)這種效果。因此我們希望同步的某一項(xiàng)數(shù)據(jù)并不是需要特別精確的情況下,盡量通過(guò)使用離散同步來(lái)節(jié)省網(wǎng)絡(luò)帶寬。

      在網(wǎng)絡(luò)用戶控制的一個(gè)關(guān)鍵方面是相同的預(yù)制體將在所有的玩家客戶端上被實(shí)例化,但其中只有一個(gè)角色是代表在當(dāng)前電腦前玩游戲的用戶,所有其他實(shí)例代表在其他電腦上玩游戲的其他用戶,因此,首先要考慮的就是輸入管理。我們可以通過(guò)“isMine”語(yǔ)段來(lái)使得一個(gè)實(shí)例上啟用輸入而不是其他的。

      如果實(shí)例控制中的PhotonView.isMine的值是true,意味著這個(gè)實(shí)例代表的就是這臺(tái)電腦上玩這個(gè)游戲的本地玩家。所以如果它是false,我們不想做任何事,并且像我們?cè)缦仍O(shè)置好的那樣僅僅依靠PhotonView組件來(lái)同步Transform和動(dòng)畫組件。

      2.3玩家實(shí)例化

      實(shí)例化玩家預(yù)設(shè)非常簡(jiǎn)單。需要在剛剛進(jìn)入房間的時(shí)候?qū)嵗?,可以依靠GameManager腳本中的Start( )消息,它將表明已經(jīng)加載了游戲,這意味著在一個(gè)房間里了。當(dāng)對(duì)角色進(jìn)行實(shí)例化的時(shí)候,可以將生產(chǎn)點(diǎn)放在地面上方。這時(shí)許多在新玩家加入房間時(shí)防止碰撞的方法之一。玩家可以在場(chǎng)景中心附近移動(dòng),這樣就避免了突然的碰撞。一個(gè)“下落的”玩家?guī)?lái)的視覺(jué)效果也是很漂亮干凈的。

      然而,當(dāng)其他玩家加入時(shí),不同的場(chǎng)景將會(huì)被加載,我們希望整個(gè)游戲保持一致性并且在有人離開(kāi)時(shí)不破壞現(xiàn)有的玩家。所以需要告訴Unity不破壞創(chuàng)建的實(shí)例,這意味著需要在一個(gè)場(chǎng)景被加載時(shí)立即檢查是否必須實(shí)例化。

      3 總結(jié)

      本文以Unity3D開(kāi)發(fā)引擎中的插件Photon Unity Networking為背景,簡(jiǎn)要介紹了PUN開(kāi)發(fā)多人網(wǎng)絡(luò)游戲的具體知識(shí),從創(chuàng)建游戲大廳、連接房間、創(chuàng)建玩家、實(shí)例化玩家,提出來(lái)具體的實(shí)施過(guò)程。拋磚引玉,為聯(lián)機(jī)游戲提供了一種新的解決方案。

      參考文獻(xiàn):

      [1]姜波.網(wǎng)絡(luò)游戲中的規(guī)范研究——以多人在線角色扮演網(wǎng)絡(luò)游戲?yàn)槔齕J].中國(guó)青年社會(huì)科學(xué),2021,40(01):99-107.

      [2]呂艷陽(yáng).多人聯(lián)機(jī)對(duì)戰(zhàn)游戲的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2017,13(34):81-83+99.

      [3]晉錚,章立.游戲設(shè)計(jì)中的極簡(jiǎn)主義風(fēng)格研究[J]. 包裝工程,2016(14):161-164.

      [4]陳麗萍.游戲引擎技術(shù)基礎(chǔ)[J].安徽電子信息職業(yè)技術(shù)學(xué)院學(xué)報(bào),2016,15(04):29-32.

      基金項(xiàng)目:

      廣東省高等教育教學(xué)改革項(xiàng)目(粵教高函[2018]132號(hào)):基于創(chuàng)新能力培養(yǎng)的《游戲程序設(shè)計(jì)》課程建設(shè)與教學(xué)改革

      开封县| 五莲县| 浦北县| 开封市| 上犹县| 商南县| 宣城市| 通渭县| 新巴尔虎右旗| 涞源县| 中山市| 新河县| 神农架林区| 平塘县| 屏边| 昂仁县| 汉寿县| 资中县| 肇州县| 财经| 明溪县| 陕西省| 巴里| 阜宁县| 福鼎市| 宁德市| 普格县| 苗栗市| 吉林市| 江油市| 班戈县| 扶风县| 城步| 耿马| 深州市| 洮南市| 车致| 遂溪县| 乌苏市| 平阳县| 五河县|