Choose your operating system:
Windows
macOS
Linux
虚幻引擎 使用 服务器-客户端 模型来模拟多人网络游戏,其中一台服务器充当游戏 主机 ,而加入该游戏的玩家则为 客户端 。实际的游戏状态由服务器调整,而每个玩家都使用 自主代理 远程控制其pawn。然后,服务器将改动内容 复制 到网络中的每台联网客户端,以便所有玩家都能享有接近于在服务器上进行游戏的体验。
监听服务器 表示玩家在其计算机上创建游戏,而 专用服务器 则是一种无界面运行的服务器。无界面服务器不会呈现任何视觉效果,并且玩家不会在服务器本地运行游戏。这使得专用服务器可以专注于游戏逻辑并调整来自客户端的传入信息,从而充分利用其资源来主持游戏。此外,这确保了参与多人游戏的所有玩家都能享有公平竞技环境。监听服务器通常适用于多人休闲游戏和合作游戏,而专用服务器则是大型或竞技游戏的理想之选。
本操作指南将向你展示如何为自己的多人游戏构建和打包专用服务器。
1.必要的设置
要遵循此操作方法中的步骤,你的项目需要满足以下要求:
+你必须使用虚幻引擎的源代码构建版本,你可以从 Epic Games Github 下载。
+如果你的项目使用的是Epic Games启动器的二进制构建版本,你需要将其迁移到Github源代码构建版本。
-
你必须有一个可以支持服务器-客户端多人游戏模式的C++项目。
-
如果你使用的是蓝图项目,你需要先将其转换为C++项目才能继续。
-
本示例将以 第三人称模板 中的新项目为例。
要从头开始构建新的多人游戏项目,请参阅多人网络游戏快速入门指南,它在第三人称模板中添加了一些基本的多人游戏机制。
2.设置服务器构建目标
专用服务器是你的项目的单独 构建目标 。当你创建构建目标时,与游戏本身相比,你会创建另一种可执行文件。它不是"TestProjectGame.exe",而是"TestProjectServer.exe",启动该可执行文件将启动计算机上的专用服务器。本小节将向你介绍将服务器构建目标添加到项目中并进行编译的过程。
-
打开项目的C++解决方案。它位于你的项目文件夹中。此处称其为 MyProject.sln 。
如果你没有C++解决方案,你可以右键点击.uproject文件,然后点击 生成Visual Studio项目文件(Generate Visual Studio Project Files) ,创建解决方案。
-
在 解决方案资源管理器 中,展开 源(Source) 文件夹,然后找到
[Project].Target.cs
文件。这是项目的默认构建目标。还有一个[Project]Editor.Target.cs
文件,用于配置虚幻编辑器如何为此项目进行构建。我们将在同一目录中创建服务器构建目标。 -
在 Windows资源管理器 中打开 源(Source)文件夹 。创建
[ProjectName].Target.cs
的副本,并将其重命名为[ProjectName]Server.Target.cs
。此处生成的文件称为TestProjectServer.Target.cs
。 -
返回Visual Studio,然后从资源管理器窗口中点击
*Server.Target.cs
并将其拖动到 解决方案资源管理器 中的源文件夹中。 -
打开
[ProjectName]Server.Target.cs
并将其内容替换为以下目标文件说明://版权所有Epic Games, Inc。保留所有权利。
using UnrealBuildTool; using System.Collections.Generic;
public TestProjectServerTarget(TargetInfo Target) : base(Target) //根据你的项目名称更改此行 { Type = TargetType.Server; DefaultBuildSettings = BuildSettingsVersion.V2; ExtraModuleNames.Add("TestProject"); //根据你的项目名称更改此行 }
确保将所有出现TestProject的地方替换为你自己项目的名称。
-
在基本目录中找到项目的.uproject文件,然后 右键点击 它,并选择 生成Visual Studio项目文件(Generate Visual Studio Project Files) 。这将为你的游戏重新生成Visual Studio解决方案,并会发现你的
*Server.Target.cs file
。 -
选择 开发编辑器(Development Editor) 构建配置。
-
点击工具栏中的 构建(Build) > 构建解决方案(Build Solution) , 构建 你的解决方案。你也可以通过右键点击解决方案资源管理器窗口中的菜单执行此操作。
-
选择 开发服务器 构建配置,然后再次 构建 解决方案。
-
找到你项目的 二进制/Win64 文件夹。你应该在此文件夹中看到服务器文件,包括
[ProjectName]Server.exe
。该可执行文件是你用于部署专用服务器的可执行文件。
3.设置起始地图和默认地图
要测试专用服务器,我们需要为项目设置默认地图,以便服务器运行可播放地图,并让用户连接至服务器。有许多方法可以完成此操作,但是最快、最直接的方法是在用户启动应用程序时,将连接流直接构建到用户的起始地图中。
-
在 虚幻编辑器 中打开你的项目。在 内容浏览器 中,请确保将所有 关卡(Level) 文件都重新放置到 内容/地图(Content/Maps) 文件夹中。可以通过将地图(Maps)文件夹从 ThirdPersonCPP 移到 内容(Content) 文件夹中完成此操作。
-
创建名为 [ProjectName]Entry 的新关卡,其中[ProjectName]替换为你的项目名称。在此示例中,称其为 TestProjectEntry 。你可以使用空白地图作为起始模板。
-
打开 起始(Entry) 地图,然后打开 关卡蓝图(Level Blueprint) 脚本。在 BeginPlay 节点上,添加 打开关卡 节点,并将其值设置为 127.0.0.1 。这是你的本地IP地址,这意味着你告知游戏连接到位于你自己计算机上的服务器。如果你用有效的IP地址替换该值,你将连接到位于该地址的服务器。
通常,起始地图是你设置主菜单UI的位置。在此示例中,起始关卡仅直接连接到用户自己的本地IP,因此我们可以快速连接到专用服务器。有关带有UI的功能齐全的起始地图示例,请参阅 ShooterGame示例项目 。
-
打开 ThirdPersonExampleMap ,并删除通常在关卡中预先放置的 第三人称角色 。相反,请确保该关卡中有两个 PlayerStarts 。这将确保玩家连接时,他们享有一致的启动体验。
-
打开你的项目设置,导航至项目(Project)> 地图和模式(Maps and Modes),然后展开默认地图。将它们更改为以下内容:
参数名
值
编辑器启动地图(Editor Startup Map)
[ProjectName]条目
游戏默认地图(Game Default Map)
[ProjectName]条目
过渡地图(Transition Map)
无
服务器默认地图(Server Default Map)
ThirdPersonExampleMap
这将确保ThirdPersonExampleMap直接向服务器开放,起始地图对用户开放,并且用户与服务器连接。
4.打包你的项目
-
点击 文件(File) > 打包(Packaging) > 打包设置(Packaging Settings) ,打开打包设置。
-
点击带有箭头的矩形按钮,展开 打包 分段底部的 高级设置 。
-
找到 要包含在打包构建中的地图列表 ,然后添加你的 起始 地图和 ThirdPersonExampleMap 。
-
点击 文件(File) > 打包项目(Package Project) > Windows(64位)(Windows (64-bit)) ,然后选择要打包项目的目录。此处,我们将
TestProject/Packaged
用作我们的输出文件夹。 -
点击 文件(File) > 打包项目(Package Project) > 构建目标(Build Target) 。你应该在正常的构建目标旁边看到 [ProjectName]服务器 。选择此选项。
-
再次打包该项目,然后选择与之前相同的输出文件夹。现在, WindowsNoEditor 旁边有一个名为 WindowsServer 的文件夹。
5.启动和测试你的专用服务器
最后,来测试我们的专用服务器。
-
打开你在上一节中创建的 WindowsServer 文件夹,然后找到 [ProjectName]Server.exe 。这里,假设它叫做TestProjectServer.exe。
-
创建 Server.exe 的快捷方式,编辑其名称,并在其末尾添加 " - ThirdPersonExampleMap" 。此处,我们将其重命名为 TestProjextServer.exe - ThirdPersonExampleMap 。
-
右键点击 服务器快捷方式 ,然后打开其 属性 。在其 目标 字段的末尾添加 "-log" ,然后点击 应用(Apply) 。
这样,当我们运行专用服务器时,它将在命令提示符工具中显示日志。根据前面小节中的设置,ThirdPersonExampleMap将已对服务器开放,因此无需在此快捷方式中添加地图参数。
-
双击 快捷方式 ,启动专用服务器。将打开 命令提示符 窗口,显示输出日志。如果服务器启动成功,你会在底部看到说明启动关卡所需时间的输出。
-
转到 WindowsNoEditor 文件夹,然后双击 TestProject.exe 。这会在新窗口中启动游戏,并且直接转到ThirdPersonExampleMap。
-
使用 ALT+Tab 离开游戏窗口,然后运行 TestProject.exe ,启动游戏的第二个实例。如果成功,你将在你启动的窗口中看到玩家。你还可以检查服务器日志,以便查看两个玩家连接到服务器的确认信息。
祝贺你!你已经为项目成功构建、打包并测试了专用服务器。
看你的了
本示例介绍了关于如何在本地计算机上构建、打包和测试服务器的基础知识。下一步将是准备可正常运行的前端程序,扩展游戏的游戏性,并提供一种玩家通过Internet连接到专用服务器的方式。
要查看实际工作中的前端示例,可以参阅 ShooterGame示例项目 ,其中使用的是ShooterEntry地图中的内容。
如需扩展你的游戏逻辑,你可以参阅多人网络游戏快速入门指南。
要通过网络连接到服务器,你可以用该服务器的IP地址代替127.0.0.1。你可以将其合并到简单的UMG UI中,而不用在起始地图中运行BeginPlay。你也可以在控制台中使用"打开(open)"命令,并提供IP地址来代替关卡名称。