多人聯(lián)機定義
單人游戲中一臺電腦只有一個游戲會話(Session),我們可以通過在同一電腦中分屏并用不同的輸入設(shè)備,單人游戲不需要使用互聯(lián)網(wǎng)。
多人游戲中,游戲?qū)嵗讵毩⒌膬膳_電腦中運行,而由于玩家在不斷地輸入指令,因此我們需要將一個游戲?qū)嵗械男畔⑼ㄟ^互聯(lián)網(wǎng)傳輸?shù)搅硪粋€游戲?qū)嵗小?/p>
那么對于傳輸信息的方式,我們有以下幾種定義:
點對點(Peer to Peer)
這種傳輸方式非常容易實現(xiàn),但是點對點有較大的缺陷,當多人游戲中玩家數(shù)量增加時,點對點傳輸?shù)男畔眲≡黾?,造成網(wǎng)絡(luò)傳輸中的巨大開銷。
?此外,點對點傳輸模式中沒有一個權(quán)威的游戲?qū)嵗?,每一個游戲?qū)嵗捎诰W(wǎng)絡(luò)傳輸?shù)臏蠖紩a(chǎn)生輕微的不同,因此不同機器上的游戲?qū)嵗际遣煌模@并不是我們想要看到的。
客戶端——服務(wù)端(Client-Server)
為了解決點對點中出現(xiàn)的問題,我們將一臺機器指定為服務(wù)器,其他所有機器被指定為客戶端,所有客戶端通過服務(wù)端交換信息,客戶端之間不會直接收發(fā)信息。因此每一個客戶端只要滿足固定的帶寬用于發(fā)送和接收來自服務(wù)器的消息。
?
服務(wù)端是權(quán)威的(Authority),這意味著服務(wù)端上運行的游戲是正確的版本
客戶端-服務(wù)端的模式有以下兩種
聆聽服務(wù)器:將一個玩家的機器充當服務(wù)器。服務(wù)器在發(fā)送信息的同時也在渲染圖形。
專用服務(wù)器:指定一個專門的機器作為服務(wù)器,沒有人在服務(wù)器上游玩游戲,因此服務(wù)器中不需要渲染圖形。
在UE4中測試多人游戲
首先我們使用第三人稱模板建立一個C++工程。?
在UE4中,提供了完整的測試客戶端與服務(wù)端的功能,在運行中,我們可以選擇是以聆聽服務(wù)器啟動或者是以客戶端啟動。
可以看到左下窗口作為了客戶端,而編輯器中的游戲?qū)嵗鳛轳雎牱?wù)器,玩家移動時,在服務(wù)端和客戶端上我們都可以看到。
而當我們使用專用服務(wù)端啟動時,我們可以看到窗口和編輯器中的游戲?qū)嵗际亲鳛榭蛻舳藛樱梢钥吹接螒蛑羞€有一個Character,這是由于初始時我們放置在游戲關(guān)卡中的,而當啟動專用服務(wù)端后,這個角色將不會被任何客戶端控制,專用服務(wù)器將會生成額外兩個角色。
?
LAN(Local Area NetWork)局域網(wǎng)測試
局域網(wǎng)絡(luò):所有玩家鏈接在同一個路由器上,我們可以通過本地IP地址訪問同一網(wǎng)絡(luò)內(nèi)的其他計算機。
我們可以通過添加一些邏輯操作測試LAN功能,首先我們建立一個默認關(guān)卡作為聯(lián)機大廳。
同時當我們按下2鍵時,使用藍圖執(zhí)行控制臺命令,命令行為“Open 192.168.1.27”
經(jīng)過驗證,只要兩臺電腦在同一個路由器下,我們就可以得到聯(lián)機效果。
?
使用C++進行LAN鏈接
在上面的教程中,我們使用藍圖進行了LAN的鏈接測試,我們同樣可以使用C++編寫相應(yīng)的函數(shù)得到相同的功能。
我們在TPtestingCharacter.h文件中聲明三個新函數(shù)。
void ATPtestingCharacter::OpenLobby()
{
UWorld* World = GetWorld();
if (World)
{
World->ServerTravel("/Game/ThirdPersonCPP/Maps/Lobby?listen");
}
}
void ATPtestingCharacter::CallOpenLevel(const FString& Address)
{
//由于這里Address是FString,而函數(shù)中需要的是FName,因此我們用星號將Address轉(zhuǎn)換為一個C風(fēng)格的字符串
UGameplayStatics::OpenLevel(this, *Address);
}
void ATPtestingCharacter::CallClientTravel(const FString& Address)
{
APlayerController* PlayerContorller = GetGameInstance()->GetFirstLocalPlayerController();
if (PlayerContorller)
{
PlayerContorller->ClientTravel(Address, ETravelType::TRAVEL_Absolute);
}
}
在線子系統(tǒng)
本地IP地址,也稱為內(nèi)部IP地址。這是由本地路由器分配的地址,沒有人可以從本地網(wǎng)絡(luò)之外連接到本地網(wǎng)絡(luò)。
?
外部IP地址,是運營商會為路由器分配一個公共的IP地址,而這個IP地址在互聯(lián)網(wǎng)中是都可以被看到的,任何信息首先進入外部IP地址,再進本地地址
虛幻的在線子系統(tǒng)可以幫助我們只關(guān)注UE上面的代碼,連接不同平臺的代碼都將會被虛幻給抽象掉,在線子系統(tǒng)中包含了我們需要連接服務(wù)的函數(shù),我們只需要指定特定的服務(wù)器,UE就會幫助我們建立連接。
在線子系統(tǒng)可以使用一系列的接口來對應(yīng)不同平臺上的各項服務(wù),例如朋友列表,成就等等。
多人游戲中創(chuàng)建游戲會話的過程:
-
建立會話
-
等待玩家加入
-
玩家登入
-
開始游戲會話
-
游玩游戲
-
結(jié)束游戲會話
-
注銷玩家文章來源:http://www.zghlxwxcb.cn/news/detail-471475.html
-
更新游戲會話或銷毀游戲會話。文章來源地址http://www.zghlxwxcb.cn/news/detail-471475.html
到了這里,關(guān)于UE4第三人稱多人聯(lián)機游戲開發(fā)01的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!