怎么开始多人游戏
最简单直接的方法是在Play的下拉菜单里设置玩家个数大于1。
这将会自动在客户端和服务器间生成网络连接。人数设为2个以上,游戏就会被连接。
这是网络连接。不是本地多人合作连接。这需要不同方式处理,这里不叙述。
高级设置
高级设置允许你指定游戏模式的多个选项。
其中一个类别允许你设置多人游戏选项:
-
下面这个表格给你解释多人游戏选项。
选项 | 描述 |
玩家个数 | 这选项定义玩家数量,在游戏运行时生成它们。编辑器和监听服务器算作玩家,专用服务器不会。客户端了剩余的玩家。 |
服务器游戏选项 | 在这里,您可以指定将作为URL参数传递给服务器的其他选项 |
运行专用服务器 | 如果勾选,则启动一个专用服务器。否则,第一个玩家将充当其他所有玩家都可连接的监听服务器 |
自动连接到服务器 | 直接将客户端连接到服务器。这意味着,当你只想测试游戏玩法时,你可以勾选它,而不需要设置连接菜单。反过来说,如果您有菜单,您应该不勾选 |
第一个游戏手柄到第二个客户端 | 当一个进程运行多个游戏窗口时,此选项确定游戏输入方式。如果默认不勾选,第一个游戏手柄连接到第一个窗口,第二个手柄附加到第二个窗口,如此类推。如果勾选,第一个手柄连接到第二个窗口。然后第一个窗口可以通过键盘/鼠标控制,如果两人在同一电脑上测试,这个比较方便。 |
使用单进程 | 这将在UE4一个实例中创建多个玩家窗口。这将加载得更快,但可能有更多的问题。如果未选中此选项,则会出现其他选项。 |
为每个玩家创建音频设备 | 启用此功能将允许从每个玩家的角度呈现准确的音频,但将使用更多的CPU。 |
根据编辑描述运行 | 这是根据当前应用的多人游戏设置描述在玩游戏时会发生什么。 |
使用单进程
当使用单进程勾选框被选择时,多个窗口会在一个UE4实例里面运行。
当不被勾选时,多个UE4实例会对应每一个玩家并提供其他选项。
选项 | 描述 |
编辑器多人游戏模式 | 这是用于编辑器中播放的网络模式(脱机播放、作为ListenServer播放或作为客户机播放)。 |
命令行参数 | 在这里,您可以分配额外的命令行选项,这些选项将被传递给独立的游戏实例。 |
多人游戏窗口大小 | 定义生成额外独立游戏实例时使用的宽度/高度。 |
在专用服务器上运行
不勾选此项,第一个客户端是监听服务器。勾选此项,所有玩家都是客户端。
启动并连接服务器
子系统和会话一章已经解释过怎么通过会话系统建立会话/服务器,但如何通过固定IP进行启动和连接呢?很简单!
蓝图
启动服务器
要启动服务器,不需要会话系统,只需使用‘OpenLevel’节点,并将‘Level Name’和‘listen’选项传递给它。
你也可以传递更多选项,通过‘?’进行分隔。
专用服务器,不需要会话系统,已经在正确的地图上启动,你可以在项目设置的‘Maps&Nodes’标签里面指定地图。
连接服务器
要连接到服务器,你只需要用‘Execute Console Command’节点和‘open IPAddress’命令,其中‘IPADDRESS’被服务器实际的IP地址替换。例如,这可以通过小文本框填写。
和蓝图相似,你同样可以用这两个函数。
启动服务器
-
连接到服务器
-
通过命令行启动
基本命令行(这些命令使用编辑器,因此不需要伪造数据):
类型 | 命令 |
监听服务器 | UE4Editor.exe ProjectName MapName?Listen -game |
专用服务器 | UE4Editor.exe ProjectName MapName -server -game -log |
客户端 | UE4Editor.exe ProjectName ServerIP -game |
NOTE:默认情况下专用服务器是没有界面的。如果你不用-log,你在专用服务器上将会看不到任何窗口。
连接过程
当新客户端第一次连接时,有几件事会发生:
首先,客户端会发送请求去连接服务器。
服务器会处理这个请求,如果服务器不拒绝连接,那就会提供适当信息来应答。
接下来这页会显示连接过程的主要步骤,是官方文档摘录的。
主要步骤
1.客户端发送请求。
2.如果服务器接受,将会发送当前地图
3.服务器等待客户端加载这地图
4.一旦加载完毕,服务器将在本地调用‘AGameMode::PreLogin’
这将给GameMode一个拒绝连接的机会
5.如果接受,服务器会调用‘AGameMode::Login’
这函数的作用是生成PlayerController,这个PlayerController将会被复制到新连接的客户端。
一旦到达,PlayerController会取代客户端上临时的PlayerController。
注意这里会调用‘APlayerController::BeginPlay’。
应该注意,此时在这个Actor上调用RPC仍然不安全。
你应该等到‘AGameMode::PostLogin’被调用。
6.假设一切顺利,‘AGameMode::PostLogin'被调用。
此时,服务器就可以安全地调用这个PlayerController上的RPC函数。
到此为止。
这可能在不久的将来进行扩展,但现在我觉得我已经涵盖了许多多人游戏的基本和不那么基本的内容。
希望这能帮助你在虚幻引擎4的多人游戏和网络开发,希望我们在未来能看到一些很酷的多人游戏!
资料:
1.尽管我有自己的知识,我还是使用了官方文件,如大纲开头所述。
2.主要网络框架,以及两个(我自己重新创建的)公共类分布的图片由“Nuno Afonso”提供,可以在这里看到:www.nafonso.com感谢这个惊人的页面!
3.几乎所有的例子,Blueprint图片和c++代码都是我自己创建的。