Unity多人游戲示例《Boss Room》,為開發(fā)者提供完美學(xué)習(xí)資料

文章來(lái)源: 作者:frank 發(fā)布時(shí)間:2022年05月10日 點(diǎn)擊數(shù):

《Boss Room》于2021年4月發(fā)布了搶先體驗(yàn)版,是Unity給開發(fā)者鮮活的項(xiàng)目示例,而現(xiàn)在應(yīng)用了更多的Unity Gaming Services(UGS)元素的《Boss Room》更加適用于多人游戲開發(fā)上手學(xué)習(xí)。

作為多人游戲的示例項(xiàng)目,《Boss Room》在一個(gè)可用于實(shí)際生產(chǎn)的環(huán)境中展示了各種UGS功能,為多人游戲的開發(fā)提供學(xué)習(xí)資源。

《Boss Room》有兩個(gè)主要用途:

其一是作為一個(gè)示范性樣例供社區(qū)用作項(xiàng)目基礎(chǔ),或作為零部件用在開發(fā)者自己的Unity游戲中。

這也讓開發(fā)者們有機(jī)會(huì)親自嘗試自己的解決方案,與UGS團(tuán)隊(duì)攜手合作,使用Unity提供的SDK來(lái)創(chuàng)建并維護(hù)一個(gè)具備所有常見功能的多人游戲。隨著Unity不斷加入新的工具和功能,《Boss Room》也在不斷發(fā)展、其功能也越來(lái)越多。

就在上個(gè)月,《Boss Room》更新了v1.1.0-pre版本,為多人游戲服務(wù)端的開發(fā)者帶來(lái)了一套全新的功能集。

讓玩家聯(lián)手勇闖《Boss Room》

作為一款多人游戲,《Boss Room》必須得有一個(gè)搜索和加入游戲的方式。

目前,玩家有兩種方法來(lái)搜索并連接到游戲。

IP直連允許玩家使用公開的IP地址相互連接。不過(guò),一臺(tái)電腦的網(wǎng)絡(luò)通常要經(jīng)由NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備)和路由器轉(zhuǎn)接,因此直接連接到別人的電腦并沒(méi)有想象得那么簡(jiǎn)單。

端口轉(zhuǎn)發(fā)(Port forwarding)技術(shù)能讓直連成為可能,但是主機(jī)方還是需要做一些額外設(shè)置才能讓其他玩家連接。此種解決方案也不具備搜索游戲比賽的功能,玩家必須通過(guò)游戲外的信息分享渠道傳遞相關(guān)加入信息才行。而它的好處是可以使用局域網(wǎng)運(yùn)行,不需要互聯(lián)網(wǎng)連接。

像《Boss Room》這種多人游戲必須要能在互聯(lián)網(wǎng)上游玩、游戲房間必須能被輕松搜索到,不可以強(qiáng)行讓玩家自己完成端口轉(zhuǎn)發(fā)。

那么這時(shí)Unity Gaming Services就有用了——Authentication、Lobby加Relay的組合技可以讓玩家輕松地創(chuàng)建或加入聯(lián)網(wǎng)游戲,不必再依靠端口轉(zhuǎn)發(fā)或游戲外的協(xié)調(diào)。

在Authentication、Lobby和Relay服務(wù)整合到《Boss Room》之后,游戲的創(chuàng)建和加入會(huì)變得更加簡(jiǎn)單,讓端口轉(zhuǎn)發(fā)和分享游戲信息顯得多余。

總的來(lái)說(shuō),游戲現(xiàn)在的聯(lián)網(wǎng)體驗(yàn)更加順暢和迅速,這一點(diǎn)對(duì)樣例項(xiàng)目來(lái)說(shuō)是加分項(xiàng),對(duì)真正的游戲來(lái)說(shuō)是必須項(xiàng)。

接下來(lái)再來(lái)看看我們從項(xiàng)目制作中總結(jié)出來(lái)的經(jīng)驗(yàn)吧!

《Boss Room》開發(fā)流程概覽

從游戲體驗(yàn)來(lái)看,《Boss Room》是一個(gè)功能齊全、主機(jī)托管的PVE多人合作游戲RPG,支持最多8名玩家——詳細(xì)的游戲功能和玩法可以在此處了解。

第一步:Authentication、UGS及本地迭代的流程

玩家要想使用其他的Unity Gaming Services服務(wù),就必須經(jīng)過(guò)身份驗(yàn)證,所以游戲在啟動(dòng)并加載完主菜單之后便會(huì)啟動(dòng)Authentication。

Authentication支持匿名登錄,玩家不需要輸入額外的信息即可開始游戲。

Authentication API默認(rèn)不會(huì)區(qū)分同一臺(tái)設(shè)備的多個(gè)游戲?qū)嵗幢阃婕掖蜷_了多個(gè)游戲進(jìn)程,游戲登陸的仍是同一個(gè)賬戶。這點(diǎn)給本地的游戲測(cè)試帶來(lái)了困難——ParrelSync克隆出來(lái)的和實(shí)際的游戲都受到了影響。

幸而這里有一個(gè)簡(jiǎn)單的解決方案:Authentication支持Profiles玩家檔案,它正是解決問(wèn)題的關(guān)鍵所在。Profiles可以有效地讓多名玩家同時(shí)在一臺(tái)設(shè)備上進(jìn)行游戲。要在本地進(jìn)行測(cè)試,我們需要讓正式版和編輯器版能在多個(gè)Profile間自由切換。

如果要?jiǎng)?chuàng)建玩家檔案,你需要根據(jù)ProfileManager類來(lái)決定使用哪一類Profile。在正式版里我們使用的是`-AuthProfile`命令行參數(shù)來(lái)指定新檔ID。在編輯器中迭代時(shí),我們用到了ParrelSync,ProfileManager類同樣支持用ParrelSync的`CloneManager`自定義參數(shù)來(lái)指定玩家檔案的類型。

我們還使用了`ProfileManager.Profile`來(lái)生成自定義的`InitializationOptions`。

在上述任務(wù)完成后,我們就可以啟動(dòng)其他服務(wù)了,并且我們用了某種方法自動(dòng)化了ParrelSync和Profile的本地迭代流程。在《Boss Room》中已經(jīng)把這一點(diǎn)改為基于dataPath,以減少對(duì)工具的束縛,但上述解決方案對(duì)ParrelSync用戶仍然有效。

創(chuàng)建房間:建立主機(jī)的流程

玩家若想創(chuàng)建主機(jī),可以輸入游戲房間的名稱、設(shè)定開放或加密房間,然后點(diǎn)擊“create”按鈕。

創(chuàng)建房間的API這時(shí)就會(huì)被調(diào)用。新建的游戲房間會(huì)進(jìn)入**locked**狀態(tài)(區(qū)別于已經(jīng)設(shè)置完畢并開放的游戲房間),直到系統(tǒng)成功完成下方分配中繼網(wǎng)絡(luò)和啟動(dòng)網(wǎng)碼傳輸?shù)牟襟E:

主機(jī)向Relay請(qǐng)求分配中繼網(wǎng)絡(luò)

UTP被啟動(dòng),主機(jī)將進(jìn)入角色選擇場(chǎng)景房間解除鎖定狀態(tài),讓其他客戶端可以自由加入。

加入游戲房間:客戶端聯(lián)網(wǎng)的流程

有幾種加入游戲房間的方式:

連接到Lobby服務(wù)上托管的公開房間

快速加入(Quickjoin),隨機(jī)加入一個(gè)公開房間

使用密碼加入,密碼可在游戲外分享。這些方式對(duì)公開和私人房間都適用。

在加入一個(gè)房間后,我們將使用房間元數(shù)據(jù)中所包含的中繼網(wǎng)絡(luò)入場(chǎng)碼,通過(guò)UTP Relay傳輸網(wǎng)絡(luò)連接到主機(jī)。

主機(jī)將收到客戶端的連接請(qǐng)求,如果一切順利,玩家將依照服務(wù)器(主機(jī))的權(quán)威跳入恰當(dāng)?shù)膱?chǎng)景。

玩家創(chuàng)建或加入游戲之后

在建立連接后,玩家將進(jìn)入角色選擇場(chǎng)景,從八名英雄中選擇一名。在所有玩家準(zhǔn)備完畢后,每一位英雄會(huì)在倒計(jì)時(shí)結(jié)束后被傳送至《Boss Room》世界,正式開始游戲。

注意,UGS Lobby和我們游戲中的“l(fā)obby”,也就是角色選擇場(chǎng)景并不是一回事。《Boss Room》的角色選擇場(chǎng)景由netcode驅(qū)動(dòng)。

需要強(qiáng)調(diào)的是,Lobby服務(wù)可以傳輸任意元數(shù)據(jù),因此同樣的角色選擇場(chǎng)景完全可以應(yīng)用到其他游戲中。

目前,Lobby服務(wù)通過(guò)輪詢(poll)來(lái)更新狀態(tài),這不利于提高選擇角色時(shí)的響應(yīng)性,如果Lobby服務(wù)在未來(lái)推出了可以實(shí)時(shí)更新的功能,那么該方法可以用作一種可行的備用方案。

斷開連接和重新連接的處理

多人游戲的斷線重連功能非常重要。

《Boss Room》使用的游戲進(jìn)程管理系統(tǒng)可以在某位玩家斷開連接時(shí)保留部分?jǐn)?shù)據(jù),在重新連上后再精確地傳回去。

我們使用的重連數(shù)據(jù)恢復(fù)方法可以在SessionManager.cs - SetupConnectingPlayerSessionData 中找到,該類會(huì)在主機(jī)處理連接批準(zhǔn)時(shí)被調(diào)用。

在房間內(nèi)游戲時(shí),斷開連接的玩家超好能立即被移除。否則,服務(wù)器將一直認(rèn)為玩家還在房間中,導(dǎo)致玩家無(wú)法重新加入。

當(dāng)玩家斷開了與Relay的連接時(shí),Lobby和Relay集成系統(tǒng)(在運(yùn)行UTP連接之前已經(jīng)啟用)會(huì)踢出斷開連接的玩家,然而斷開連接的狀態(tài)會(huì)持續(xù)相當(dāng)長(zhǎng)時(shí)間(約為2分鐘),因此我們不能僅依賴這種機(jī)制。

為了使退出房間的過(guò)程更加可靠,我們應(yīng)用了幾個(gè)額外的清理機(jī)制:

客戶端包含有退出應(yīng)用的邏輯,可以發(fā)送請(qǐng)求來(lái)將玩家移除

主機(jī)有著專門的清理邏輯,如果有玩家斷開連接,則主機(jī)就會(huì)把這名玩家從房間中移除(通過(guò)調(diào)用`NetworkManager.OnClientDisconnectCallback`)——這在客戶端崩潰并且無(wú)法發(fā)送“退出房間”的請(qǐng)求時(shí)非常有用。為了做到這點(diǎn),主機(jī)會(huì)用SessionManager來(lái)保存與NGO clientId對(duì)應(yīng)的UGS playerId。

最后,客戶端還包含了檢測(cè)主機(jī)是否已離開房間的檢測(cè)邏輯,如果主機(jī)離開了房間,則客戶端也會(huì)離開。

主站蜘蛛池模板: 香瓜七兄弟第二季| 114级毛片免费观看| 欧美三级黄色大片| 国产一级一片免费播放视频| …久久精品99久久香蕉国产| 欧美国产日韩综合| 四虎影视永久地址www成人 | 成人污视频在线观看| 人妻少妇偷人精品视频| 日本网址在线观看| 巨胸流奶水视频www网站| 亚洲成a人片77777群色| 蜜桃成熟时3之蜜桃仙子电影| 大奶校花催眠全世界| 久久综合综合久久综合| 皇后羞辱打开双腿调教h孕| 国产日韩精品视频| 一二三四社区在线视频社区| 欧美一级片在线观看| 午夜老司机免费视频| www.四虎影视| 尤物国午夜精品福利网站| 亚洲AV无码专区国产乱码DVD | 九色视频在线观看| 精品中文字幕一区在线| 国产日韩精品欧美一区| www.精品国产| 日韩av激情在线观看| 亚洲美女一区二区三区| 色综合视频在线| 国外欧美一区另类中文字幕| 天天狠天天透天干天天怕∴| 日本高清免费在线视频| 日韩免费a级在线观看| 欧美老妇bbbwwbbww| 知乎的小说哪里可以免费| 色多多在线观看视频| 精品一久久香蕉国产二月| 野花社区在线观看www| 爆乳少妇在办公室在线观看| 日本伊人精品一区二区三区|