多人联机定义
单人游戏中一台电脑只有一个游戏会话(Session),我们可以通过在同一电脑中分屏并用不同的输入设备,单人游戏不需要使用互联网。
多人游戏中,游戏实例在独立的两台电脑中运行,而由于玩家在不断地输入指令,因此我们需要将一个游戏实例中的信息通过互联网传输到另一个游戏实例中。
那么对于传输信息的方式,我们有以下几种定义:
点对点(Peer to Peer)
这种传输方式非常容易实现,但是点对点有较大的缺陷,当多人游戏中玩家数量增加时,点对点传输的信息将会急剧增加,造成网络传输中的巨大开销。
此外,点对点传输模式中没有一个权威的游戏实例,每一个游戏实例由于网络传输的滞后都会产生轻微的不同,因此不同机器上的游戏实例都是不同的,这并不是我们想要看到的。
客户端——服务端(Client-Server)
为了解决点对点中出现的问题,我们将一台机器指定为服务器,其他所有机器被指定为客户端,所有客户端通过服务端交换信息,客户端之间不会直接收发信息。因此每一个客户端只要满足固定的带宽用于发送和接收来自服务器的消息。
服务端是权威的(Authority),这意味着服务端上运行的游戏是正确的版本
客户端-服务端的模式有以下两种
聆听服务器:将一个玩家的机器充当服务器。服务器在发送信息的同时也在渲染图形。
专用服务器:指定一个专门的机器作为服务器,没有人在服务器上游玩游戏,因此服务器中不需要渲染图形。
在UE4中测试多人游戏
首先我们使用第三人称模板建立一个C++工程。
在UE4中,提供了完整的测试客户端与服务端的功能,在运行中,我们可以选择是以聆听服务器启动或者是以客户端启动。
可以看到左下窗口作为了客户端,而编辑器中的游戏实例作为聆听服务器,玩家移动时,在服务端和客户端上我们都可以看到。
而当我们使用专用服务端启动时,我们可以看到窗口和编辑器中的游戏实例都是作为客户端启动,可以看到游戏中还有一个Character,这是由于初始时我们放置在游戏关卡中的,而当启动专用服务端后,这个角色将不会被任何客户端控制,专用服务器将会生成额外两个角色。
LAN(Local Area NetWork)局域网测试
局域网络:所有玩家链接在同一个路由器上,我们可以通过本地IP地址访问同一网络内的其他计算机。
我们可以通过添加一些逻辑操作测试LAN功能,首先我们建立一个默认关卡作为联机大厅。
同时当我们按下2键时,使用蓝图执行控制台命令,命令行为“Open 192.168.1.27”
经过验证,只要两台电脑在同一个路由器下,我们就可以得到联机效果。
使用C++进行LAN链接
在上面的教程中,我们使用蓝图进行了LAN的链接测试,我们同样可以使用C++编写相应的函数得到相同的功能。
我们在TPtestingCharacter.h文件中声明三个新函数。
void ATPtestingCharacter::OpenLobby()
{
UWorld* World = GetWorld();
if (World)
{
World->ServerTravel("/Game/ThirdPersonCPP/Maps/Lobby?listen");
}
}
void ATPtestingCharacter::CallOpenLevel(const FString& Address)
{
//由于这里Address是FString,而函数中需要的是FName,因此我们用星号将Address转换为一个C风格的字符串
UGameplayStatics::OpenLevel(this, *Address);
}
void ATPtestingCharacter::CallClientTravel(const FString& Address)
{
APlayerController* PlayerContorller = GetGameInstance()->GetFirstLocalPlayerController();
if (PlayerContorller)
{
PlayerContorller->ClientTravel(Address, ETravelType::TRAVEL_Absolute);
}
}
在线子系统
本地IP地址,也称为内部IP地址。这是由本地路由器分配的地址,没有人可以从本地网络之外连接到本地网络。
外部IP地址,是运营商会为路由器分配一个公共的IP地址,而这个IP地址在互联网中是都可以被看到的,任何信息首先进入外部IP地址,再进本地地址
虚幻的在线子系统可以帮助我们只关注UE上面的代码,连接不同平台的代码都将会被虚幻给抽象掉,在线子系统中包含了我们需要连接服务的函数,我们只需要指定特定的服务器,UE就会帮助我们建立连接。
在线子系统可以使用一系列的接口来对应不同平台上的各项服务,例如朋友列表,成就等等。
多人游戏中创建游戏会话的过程:
-
建立会话
-
等待玩家加入
-
玩家登入
-
开始游戏会话
-
游玩游戏
-
结束游戏会话
-
注销玩家文章来源:https://www.toymoban.com/news/detail-471475.html
-
更新游戏会话或销毁游戏会话。文章来源地址https://www.toymoban.com/news/detail-471475.html
到了这里,关于UE4第三人称多人联机游戏开发01的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!