UE4虛幻引擎VR交互多人游戲體驗
來源:
52vr |
責(zé)任編輯:傳說的落葉 |
發(fā)布時間: 2019-06-04 08:20 | 瀏覽量:
最近Helios開展了一個為期僅僅兩周的內(nèi)部項目,旨在讓研究人員熟悉在UE4中創(chuàng)建多玩家虛擬現(xiàn)實程序的過程。由于HTC Vive有足夠的游戲空間并具備運動控制器,所以它被選為實驗的VR硬件。研究組將分別把玩家放置在不同的游戲場地,但是他們體驗的虛擬場景是一樣的,他們同時進行游戲并且積累游戲經(jīng)驗。此實驗的目的是促進玩家在相同的虛擬世界中的互動與競爭。另外,研究人員還會在HTC Vive控制器觸摸板里添加一些簡單的命令,因為在游戲時兩個玩家可能會爭奪同一個fireflies,此時并不能保證他們都能聽見相關(guān)指令,所以研究人員想到運用表情符號,或創(chuàng)造一些顏色和燈光信號,好讓玩家能進行簡單的交流。
為了完成以上實驗,我們必須深入研究Unreal現(xiàn)有的網(wǎng)絡(luò)功能。不負眾望,Unreal具有非常出色的單擊聯(lián)網(wǎng)功能,并且所有actors都具有基礎(chǔ)功能,比如“復(fù)制”指令能讓服務(wù)器端的指令能快速復(fù)制到所有相關(guān)的客戶端。不難發(fā)現(xiàn),Unreal有非常完善的網(wǎng)絡(luò)系統(tǒng),這個系統(tǒng)具有良好的記錄和實施指令的能力,但是他們比VR更關(guān)注傳統(tǒng)游戲。
一個典型的傳統(tǒng)游戲中,玩家只能在任意時間觀察某一特定空間的情況,但是如果加入VR的話,您就能同時觀察好幾個空間并且切換到不同的玩家的視角。現(xiàn)在玩家的頭和雙手獲得了解放,但是如果身體保持靜止的話是無法實施指令的,所以還要想出辦法控制所有的復(fù)制指令。
必須銘記這一點,因為復(fù)制指令只能從服務(wù)器發(fā)到客戶端??蛻舳吮仨氄{(diào)用服務(wù)器RPC來更新變量或組播,然后才能復(fù)制到客戶端。這點將在以后的項目總結(jié)中深入討論。

第一步
第一步連接兩個機器:
除了一些允許添加其他控制器的室內(nèi)VR組塊外,藍圖能用于整個項目。藍圖能讓您縱觀整個項目,讓您親眼看到復(fù)制指令和網(wǎng)絡(luò)系統(tǒng)是如何運行的。
當(dāng)用Unreal創(chuàng)建多人游戲時,需要設(shè)置在線子系統(tǒng)。這些子系統(tǒng)可以是Steam,Playstation Network或XBox Live。但是,如果設(shè)置為“null”,系統(tǒng)會默認為LAN。要設(shè)置在線子系統(tǒng),您必須進入您的Project.Build.cs,并對注釋過的在線子系統(tǒng)取消備注。接下來,您必須將“OnlineSubsystemNull”添加到PublicDependencyModuleNames。
充分利用Epic的Learning 內(nèi)容,并從現(xiàn)有的“多人射擊”范例中復(fù)制粘貼所有的在線Blueprints代碼。這一引用對Unreal該如何開始游戲,加入游戲,處理錯誤和其他網(wǎng)絡(luò)問題等有很大幫助,也完美的展示了游戲模式—OnPostLogin是如何工作以及如何被應(yīng)用的。
連接機器
兩臺機器連接好以后,就要開始在從兩臺機器間獲取數(shù)據(jù)。這些信息的獲取通常被描述為“黑客方式”,因為它包含了很多強制實施指令,并給LAN帶來很大負擔(dān)。雖然它完全不能優(yōu)化任何東西,也沒有充分利用Unreal的網(wǎng)絡(luò)功能,比如復(fù)制的變量,但是這些信息既穩(wěn)定又行之有效。要想完整了解所有的復(fù)制方法,請參閱Unreal的復(fù)制文檔。
以下步驟適用于所有需要復(fù)制的內(nèi)容。在這個例子中,我們將使用HMD的位置和方向指令,因為它們是復(fù)制到其他客戶端的關(guān)鍵:
相信客戶端。有關(guān)欺騙因素不是這個項目的關(guān)注點,我們選擇信任客戶端傳送到服務(wù)器的一切。所以不需要進行預(yù)測。
通過event圖表劃分服務(wù)器和客戶端。在你的所有需要被復(fù)制actors中創(chuàng)建一個名為“服務(wù)器”的新的event圖表,并將服務(wù)器端的功能加入該圖表中。這個圖表能幫您追蹤哪些功能正在哪里運行。
將所有相關(guān)數(shù)據(jù)發(fā)送到服務(wù)器。復(fù)制需要使用由“Run on Server”復(fù)制的custom event。您可以通過您的客戶端把所有您想復(fù)制的數(shù)據(jù)傳到這個新的event,,比如HMD的事件,位置和循環(huán)。
從服務(wù)器組播一切。服務(wù)器的工作就是,從所有連接的客戶端上調(diào)出最合適的 “組播”event,在此基礎(chǔ)上轉(zhuǎn)播前一步驟的數(shù)據(jù)。只有服務(wù)器可以調(diào)用組播功能,而這也是客戶端首先將數(shù)據(jù)發(fā)送到服務(wù)器的原因。
最后,多播服務(wù)器會將數(shù)據(jù)發(fā)送給每個客戶端,所以所有客戶端都會接收數(shù)據(jù),并能進行位置和循環(huán)更新?,F(xiàn)在,所有相關(guān)的actors都根據(jù)實踐中用戶的輸入,或頭部的移動完成了相應(yīng)的更新。
注意事項
IsLocallyControled:最后,您要確保自己始終都是使用IsLocallyControlled來確保您只從玩家的pawn,而不是從本地存儲的其他遠程pawn來發(fā)送數(shù)據(jù)。Pawn類的一個實例是它被復(fù)制到客戶端來表示另一個玩家,所以代碼被運行到您的本地Pawn而不是'ghost' pawn(另一個玩家)。運行IsLocallyControlled,可以確保我們只發(fā)送客戶端數(shù)據(jù),而不是“ghost”pawn數(shù)據(jù)。如果不這樣做的話會系統(tǒng)會一片混亂。
我們的fireflies是僅給客戶端提供位置和循環(huán)復(fù)制的服務(wù)端。這給LAN增加了大量的額外數(shù)據(jù)。理想情況下,fireflies是確定的,本地的。
充分利用PlayerState。所有連接的客戶端的PlayerStates都可用于游戲模式(僅限服務(wù)器),這使得它成為存儲分數(shù)或生命值的最佳地點。它能確保在游戲模式下檢測到玩家是否達到獲勝分數(shù)或是否死亡等訊息時,系統(tǒng)能做出及時的反應(yīng)。
測試
現(xiàn)在在服務(wù)器和客戶端上我們有一些actors,并且它們都是復(fù)制的,我們需要對它們進行測試,不得不說,這很困難。您不能在同一臺機器上測試兩個客戶端。 HMD不支持一次被兩個應(yīng)用程序使用,性能很快就會變得非常差(每秒只有半幀)。 我們使用Listen服務(wù)器來開始程序。這允許主機在扮演服務(wù)器的同時正常工作,并在調(diào)試時給予我們更多的控制權(quán)限。
您還會遇到很多“服務(wù)器已更新但客戶端沒有”等類型的問題。這是因為玩家不理解UE4的服務(wù)器—客戶端在網(wǎng)絡(luò)模式下工作方式,而不是UE4代碼的問題。您只需要花點時間去多關(guān)注一下有關(guān)復(fù)制及其應(yīng)用方式的相關(guān)知識,就能解決這個問題了。
VR多人游戲每次都需要兩位開發(fā)人員進行測試。您曾經(jīng)嘗試過戴著兩個HMD并且揮舞著四個運動控制器么?沒有?我也是。
不能通過編輯器來測試多人游戲。如果兩個開發(fā)人員分別都在編輯地圖(即使是相同的版本),但是如果嘗試使用PIE,兩人就會獲得不同的地圖版本,因為兩個編輯器的客戶端都會生成相應(yīng)的PIE版本地圖。
解決辦法就是不要使用“單機”,因為單機不適合用VR!但若您必須用VR Preview,就又得回去解決PIE不匹配的問題。
解決方法還有不要使用“Launch”。盡管這個指令能做好并啟動磁盤中的內(nèi)容,它卻會允許HMD的連接。但幸好它只會打開壓縮包,或啟動編輯器打開的當(dāng)前內(nèi)容。
所以VR的解決辦法是:您需要熟悉項目生成的“虛幻前端”。此工具允許用戶自定義游戲的制作和部署過程。
最重要的一點是,“項目啟動器”在編輯器中“啟動”的下拉菜單里。
項目啟動器允許您創(chuàng)建“自定義啟動配置文件”,您可以選擇“By the Book”這一項,然后在其中選擇需要的配置文件和地圖。
構(gòu)建Shipping
在線子系統(tǒng)默認平臺服務(wù)—Null
最后完成項目的所有傳送,并將其部署在幾臺機器上進行播放測試。必須確保在構(gòu)建之前將[OnlineSubsystem] DefaultPlatformService = Null放入DefaultEngine.ini文件中。 沒有這個您的游戲?qū)⒔⒃跊]有一個定義好的OnlineSubsystem上,并將無法進行網(wǎng)絡(luò)連接。








項目總結(jié)
某種程度上來說這個項目是成功的,因為我們能夠感受到在虛幻引擎4中創(chuàng)建多玩家虛擬現(xiàn)實體驗的復(fù)雜性。我們了解了玩家之間溝通的重要性,即使是通過表情符號進行簡單溝通也會帶來不一樣的游戲體驗。另一個重要點是玩家的身體反饋,我們授予玩家用螢火蟲網(wǎng)攻擊他人的能力,同時被打擊的玩家身上會出現(xiàn)一個愚蠢的表情符號。即使一個簡單的復(fù)活節(jié)彩蛋也能增強游戲的體驗性。這使得玩家感覺他們確實處于同一個游戲世界。沒有它的話,玩家雖然可以看到對方,但會感到有些不足,會破壞了體驗的沉浸性。
實驗最大的花銷是就是過多的測試費用。對開發(fā)人員和質(zhì)量保證團隊來說這個測試實在太耗時了,這一點就足以打亂整個項目的時間表。但是如果沒有足夠的測試,一個項目很快就會陷入混亂。所以我們在這兩周的時間里竭盡全力的設(shè)法完成了大量的測試工作,我們希望與未來的客戶分享這個concept piece,希望為粉絲,用戶和客戶提供充分的相關(guān)知識。
為了完成以上實驗,我們必須深入研究Unreal現(xiàn)有的網(wǎng)絡(luò)功能。不負眾望,Unreal具有非常出色的單擊聯(lián)網(wǎng)功能,并且所有actors都具有基礎(chǔ)功能,比如“復(fù)制”指令能讓服務(wù)器端的指令能快速復(fù)制到所有相關(guān)的客戶端。不難發(fā)現(xiàn),Unreal有非常完善的網(wǎng)絡(luò)系統(tǒng),這個系統(tǒng)具有良好的記錄和實施指令的能力,但是他們比VR更關(guān)注傳統(tǒng)游戲。
一個典型的傳統(tǒng)游戲中,玩家只能在任意時間觀察某一特定空間的情況,但是如果加入VR的話,您就能同時觀察好幾個空間并且切換到不同的玩家的視角。現(xiàn)在玩家的頭和雙手獲得了解放,但是如果身體保持靜止的話是無法實施指令的,所以還要想出辦法控制所有的復(fù)制指令。
必須銘記這一點,因為復(fù)制指令只能從服務(wù)器發(fā)到客戶端??蛻舳吮仨氄{(diào)用服務(wù)器RPC來更新變量或組播,然后才能復(fù)制到客戶端。這點將在以后的項目總結(jié)中深入討論。

第一步
第一步連接兩個機器:
除了一些允許添加其他控制器的室內(nèi)VR組塊外,藍圖能用于整個項目。藍圖能讓您縱觀整個項目,讓您親眼看到復(fù)制指令和網(wǎng)絡(luò)系統(tǒng)是如何運行的。
當(dāng)用Unreal創(chuàng)建多人游戲時,需要設(shè)置在線子系統(tǒng)。這些子系統(tǒng)可以是Steam,Playstation Network或XBox Live。但是,如果設(shè)置為“null”,系統(tǒng)會默認為LAN。要設(shè)置在線子系統(tǒng),您必須進入您的Project.Build.cs,并對注釋過的在線子系統(tǒng)取消備注。接下來,您必須將“OnlineSubsystemNull”添加到PublicDependencyModuleNames。
充分利用Epic的Learning 內(nèi)容,并從現(xiàn)有的“多人射擊”范例中復(fù)制粘貼所有的在線Blueprints代碼。這一引用對Unreal該如何開始游戲,加入游戲,處理錯誤和其他網(wǎng)絡(luò)問題等有很大幫助,也完美的展示了游戲模式—OnPostLogin是如何工作以及如何被應(yīng)用的。
連接機器
兩臺機器連接好以后,就要開始在從兩臺機器間獲取數(shù)據(jù)。這些信息的獲取通常被描述為“黑客方式”,因為它包含了很多強制實施指令,并給LAN帶來很大負擔(dān)。雖然它完全不能優(yōu)化任何東西,也沒有充分利用Unreal的網(wǎng)絡(luò)功能,比如復(fù)制的變量,但是這些信息既穩(wěn)定又行之有效。要想完整了解所有的復(fù)制方法,請參閱Unreal的復(fù)制文檔。
以下步驟適用于所有需要復(fù)制的內(nèi)容。在這個例子中,我們將使用HMD的位置和方向指令,因為它們是復(fù)制到其他客戶端的關(guān)鍵:
相信客戶端。有關(guān)欺騙因素不是這個項目的關(guān)注點,我們選擇信任客戶端傳送到服務(wù)器的一切。所以不需要進行預(yù)測。
通過event圖表劃分服務(wù)器和客戶端。在你的所有需要被復(fù)制actors中創(chuàng)建一個名為“服務(wù)器”的新的event圖表,并將服務(wù)器端的功能加入該圖表中。這個圖表能幫您追蹤哪些功能正在哪里運行。
將所有相關(guān)數(shù)據(jù)發(fā)送到服務(wù)器。復(fù)制需要使用由“Run on Server”復(fù)制的custom event。您可以通過您的客戶端把所有您想復(fù)制的數(shù)據(jù)傳到這個新的event,,比如HMD的事件,位置和循環(huán)。
從服務(wù)器組播一切。服務(wù)器的工作就是,從所有連接的客戶端上調(diào)出最合適的 “組播”event,在此基礎(chǔ)上轉(zhuǎn)播前一步驟的數(shù)據(jù)。只有服務(wù)器可以調(diào)用組播功能,而這也是客戶端首先將數(shù)據(jù)發(fā)送到服務(wù)器的原因。
最后,多播服務(wù)器會將數(shù)據(jù)發(fā)送給每個客戶端,所以所有客戶端都會接收數(shù)據(jù),并能進行位置和循環(huán)更新?,F(xiàn)在,所有相關(guān)的actors都根據(jù)實踐中用戶的輸入,或頭部的移動完成了相應(yīng)的更新。
注意事項
IsLocallyControled:最后,您要確保自己始終都是使用IsLocallyControlled來確保您只從玩家的pawn,而不是從本地存儲的其他遠程pawn來發(fā)送數(shù)據(jù)。Pawn類的一個實例是它被復(fù)制到客戶端來表示另一個玩家,所以代碼被運行到您的本地Pawn而不是'ghost' pawn(另一個玩家)。運行IsLocallyControlled,可以確保我們只發(fā)送客戶端數(shù)據(jù),而不是“ghost”pawn數(shù)據(jù)。如果不這樣做的話會系統(tǒng)會一片混亂。
我們的fireflies是僅給客戶端提供位置和循環(huán)復(fù)制的服務(wù)端。這給LAN增加了大量的額外數(shù)據(jù)。理想情況下,fireflies是確定的,本地的。
充分利用PlayerState。所有連接的客戶端的PlayerStates都可用于游戲模式(僅限服務(wù)器),這使得它成為存儲分數(shù)或生命值的最佳地點。它能確保在游戲模式下檢測到玩家是否達到獲勝分數(shù)或是否死亡等訊息時,系統(tǒng)能做出及時的反應(yīng)。
測試
現(xiàn)在在服務(wù)器和客戶端上我們有一些actors,并且它們都是復(fù)制的,我們需要對它們進行測試,不得不說,這很困難。您不能在同一臺機器上測試兩個客戶端。 HMD不支持一次被兩個應(yīng)用程序使用,性能很快就會變得非常差(每秒只有半幀)。 我們使用Listen服務(wù)器來開始程序。這允許主機在扮演服務(wù)器的同時正常工作,并在調(diào)試時給予我們更多的控制權(quán)限。
您還會遇到很多“服務(wù)器已更新但客戶端沒有”等類型的問題。這是因為玩家不理解UE4的服務(wù)器—客戶端在網(wǎng)絡(luò)模式下工作方式,而不是UE4代碼的問題。您只需要花點時間去多關(guān)注一下有關(guān)復(fù)制及其應(yīng)用方式的相關(guān)知識,就能解決這個問題了。
VR多人游戲每次都需要兩位開發(fā)人員進行測試。您曾經(jīng)嘗試過戴著兩個HMD并且揮舞著四個運動控制器么?沒有?我也是。
不能通過編輯器來測試多人游戲。如果兩個開發(fā)人員分別都在編輯地圖(即使是相同的版本),但是如果嘗試使用PIE,兩人就會獲得不同的地圖版本,因為兩個編輯器的客戶端都會生成相應(yīng)的PIE版本地圖。
解決辦法就是不要使用“單機”,因為單機不適合用VR!但若您必須用VR Preview,就又得回去解決PIE不匹配的問題。
解決方法還有不要使用“Launch”。盡管這個指令能做好并啟動磁盤中的內(nèi)容,它卻會允許HMD的連接。但幸好它只會打開壓縮包,或啟動編輯器打開的當(dāng)前內(nèi)容。
所以VR的解決辦法是:您需要熟悉項目生成的“虛幻前端”。此工具允許用戶自定義游戲的制作和部署過程。
最重要的一點是,“項目啟動器”在編輯器中“啟動”的下拉菜單里。
項目啟動器允許您創(chuàng)建“自定義啟動配置文件”,您可以選擇“By the Book”這一項,然后在其中選擇需要的配置文件和地圖。
構(gòu)建Shipping
在線子系統(tǒng)默認平臺服務(wù)—Null
最后完成項目的所有傳送,并將其部署在幾臺機器上進行播放測試。必須確保在構(gòu)建之前將[OnlineSubsystem] DefaultPlatformService = Null放入DefaultEngine.ini文件中。 沒有這個您的游戲?qū)⒔⒃跊]有一個定義好的OnlineSubsystem上,并將無法進行網(wǎng)絡(luò)連接。








項目總結(jié)
某種程度上來說這個項目是成功的,因為我們能夠感受到在虛幻引擎4中創(chuàng)建多玩家虛擬現(xiàn)實體驗的復(fù)雜性。我們了解了玩家之間溝通的重要性,即使是通過表情符號進行簡單溝通也會帶來不一樣的游戲體驗。另一個重要點是玩家的身體反饋,我們授予玩家用螢火蟲網(wǎng)攻擊他人的能力,同時被打擊的玩家身上會出現(xiàn)一個愚蠢的表情符號。即使一個簡單的復(fù)活節(jié)彩蛋也能增強游戲的體驗性。這使得玩家感覺他們確實處于同一個游戲世界。沒有它的話,玩家雖然可以看到對方,但會感到有些不足,會破壞了體驗的沉浸性。
實驗最大的花銷是就是過多的測試費用。對開發(fā)人員和質(zhì)量保證團隊來說這個測試實在太耗時了,這一點就足以打亂整個項目的時間表。但是如果沒有足夠的測試,一個項目很快就會陷入混亂。所以我們在這兩周的時間里竭盡全力的設(shè)法完成了大量的測試工作,我們希望與未來的客戶分享這個concept piece,希望為粉絲,用戶和客戶提供充分的相關(guān)知識。
-
分享到:
相關(guān)文章
網(wǎng)友評論
全部評論:0條
推薦
熱門