虚幻引擎(Unreal Engine)
通过实践学习并在 Edgegap 部署你的第一个专用服务器。在本指南结束时,你将已在 Edgegap 上免费部署了一个专用服务器。
使用 Docker Desktop 构建是入门最快、最简单且最可靠的方法。
✔️ 准备工作
安装 Edgegap 快速入门 Docker 扩展
从 Docker Desktop / 扩展 / 浏览 安装或 使用该链接.

对你的服务器构建很有把握? 跳到 虚幻引擎(Unreal Engine) 和 高级功能.
⚙️ 1. 配置项目
此方法不需要下载 Unreal Engine 源代码或从源码构建!
☑️ 首先 验证你的 Unreal Engine 版本 - 已从你的项目文件预填的值。
☑️ 输入 GitHub 用户名和 PAT 来自 虚幻引擎(Unreal Engine),以便从 GitHub 下载依赖项。
🔧 2. 构建游戏服务器
现在我们将构建和烹制(cook)你的项目,并将其打包成易于重用的 docker 镜像。
☑️ 你可以配置以下选项(或保持默认):
镜像名称 是你选择的唯一标识符,用于在交付前标记你的服务器构建。
通常,这会包含你的游戏名称——例如“my-game-server”。
镜像标签 是指向你镜像特定版本的标识符。
术语“构建产物”(build artifact)有时用于指代镜像的特定版本。
时间戳是标记的一个很好的选项,例如:
2024.01.30-16.23.00-UTC(默认)。
☑️ 构建项目 一旦你对配置满意即可。完成此步骤将会在本地 Docker 客户端中添加一个包含你的 Linux 游戏服务器可执行文件的新镜像。
✅ 你现在可以继续下一步。
🧪 3. 在本地测试服务器
☑️ 选择你希望在本地运行的镜像标签 (远程镜像将被下载)。可选地,还可以提供更多 docker run 参数 以自定义本地测试:
-p 7777:7777/udp- 这是你的本地容器 端口映射,-e ARBITRIUM_PORT_GAMEPORT_INTERNAL=7777是一个 环境变量 模拟真实的 Edgegap 部署,告诉你的游戏服务器用于监听玩家连接的内部端口。
☑️ 一旦你对配置满意,点击 启动本地服务器。完成此步骤将会导致 在你的开发机器上启动一个新容器 。
☑️ 现在是将你的 Unreal Engine 编辑器(PIE)游戏客户端连接到本地服务器容器的时候了。使用打开控制台 ~ (波浪号)并使用 open <ip>:<port> 连接:
ip=localhost或127.0.0.1(在大多数情况下等效),端口= Docker GUI 中容器的随机外部端口值。
✅ 你现在可以继续下一步。
故障排除与常见问题
无法将客户端连接到服务器 - 请求超时。 , 请求超时 , 连接失败 ,或 端口验证失败
首先,确保容器已启动,并且日志中没有运行时错误。
请验证你在
docker run命令中使用的端口值是否匹配。请确保你的游戏客户端正在连接到 外部端口 ,该值显示在你的容器详情页面上,出于安全原因此值将始终是随机的。
请确保你已按步骤中所述重命名目标文件并配置了游戏构建 ⚙️ 1. 配置项目.
我的容器已启动,但之后几分钟内无法连接。
一旦容器启动,游戏引擎初始化就会开始。此过程可能需要数秒到数分钟不等,在此期间服务器不会接受玩家连接。
请考虑优化服务器初始化以缩短该时间。
游戏客户端应以 1 秒间隔重试连接,持续有限时间(取决于你的初始化时长),之后应返回匹配流程。
可以考虑添加加载场景,让服务器在初始化(以及在 Unreal Engine 情况下进行 travel)时与客户端同时执行初始化并同步状态。
警告:无法为绑定地址创建套接字
请通过 Fab 资源商店安装 Epic 的 Steam 子系统插件。
当使用从 GitHub 下载的 SteamCore 源版本的 Edgegap Integration Kit (EGIK) 时,由于 Epic Games 的插件分发政策,不包含 Epic 的 Steam 子系统插件。
我已连接但屏幕完全是黑的。
验证你是否已正确设置 游戏默认地图 位于 编辑 / 项目设置 / 地图与模式.
☁️ 4. 发布到 Edgegap
☑️ 选择一个应用名称 用于在 Edgegap 上标记和分组相似的镜像。
☑️ 选择你希望发布的镜像标签 和 上传镜像。完成此步骤将把你的服务器镜像上传到 Edgegap Registry,并在你的网页浏览器中创建一个新的 应用版本 。 确保在提示时创建你的 端口映射 , 使用默认值.
发现了 bug 需要重新构建/发布?使用 从源码重建 来 虚幻引擎(Unreal Engine) 和 虚幻引擎(Unreal Engine) 快速使用当前扩展输入值。
✅ 你现在可以继续下一步。
🚀 5. 部署到云端
☑️ 现在我们将执行最终测试并 将你的 Unreal Engine 编辑器连接到云端部署。获取你的 部署主机 以替代服务器 IP,并获取部署的 外部端口,在游戏客户端中打开 Unreal 控制台(波浪号 ~)并输入 open {host}:{port} .
故障排除与常见问题
无法将客户端连接到服务器 - 请求超时。 , 请求超时 , 连接失败 ,或 端口验证失败
首先,确保部署处于就绪状态,并且部署日志中没有运行时异常或错误。如果你的部署已停止,请在我们的 控制面板.
检查日志。 请验证你在服务器构建的网络代码设置中的端口设置是否与你应用版本 请验证你在服务器构建的网络代码设置中的端口设置是否与你 中的内部端口匹配。对于插件构建,端口会自动为你设置。你可以通过编辑
请确保你的游戏客户端正在连接到 外部端口 来更改端口映射而无需重新构建。在你的网络代码集成中找到你的协议。
请确保你已按步骤中所述重命名目标文件并配置了游戏构建 虚幻引擎(Unreal Engine).
显示在你的部署详情页面上,该值出于安全原因将始终是随机的。 你位于中国并使用智能舰队
吗?你的连接可能会被防火长城阻断。请考虑向你的舰队添加位于中国的服务器,或使用 VPN 进行连接。
我的部署已就绪,但之后几分钟内无法连接。
请考虑优化服务器初始化以缩短该时间。
游戏客户端应以 1 秒间隔重试连接,持续有限时间(取决于你的初始化时长),之后应返回匹配流程。
可以考虑添加加载场景,让服务器在初始化(以及在 Unreal Engine 情况下进行 travel)时与客户端同时执行初始化并同步状态。
警告:无法为绑定地址创建套接字
请通过 Fab 资源商店安装 Epic 的 Steam 子系统插件。
一旦部署处于就绪状态,游戏引擎初始化就会开始。此过程可能需要数秒到数分钟不等,在此期间服务器不会接受玩家连接。
我已连接但屏幕完全是黑的。
验证你是否已正确设置 游戏默认地图 位于 编辑 / 项目设置 / 地图与模式.
当使用从 GitHub 下载的 SteamCore 集成包(SIK)源版本与 Edgegap Integration Kit (EGIK) 一起时,由于 Epic Games 的插件分发政策,不包含 Epic 的 Steam 子系统插件。 验证 已在
DefaultEngine.ini.
中禁用 Unreal Engine 版本兼容性检查
我的部署已停止/重启且我无法再访问其日志。
如果服务器进程因异常崩溃,我们的系统将尝试自动重启服务器。请考虑在本地测试你的服务器以查明根本原因。 我们仅在部署运行期间保留日志,如果你希望在部署停止后检查日志,请.
集成第三方日志存储 部署 查看
以发现停止部署的所有原因。
我的部署在 X 分钟后自动停止。
集成第三方日志存储 部署 查看
与
如果玩家离开我的部署会发生什么?
默认情况下,服务器不会拒绝玩家连接。玩家认证由你的开发人员负责,因为可以使用多种不同的方法和玩家认证提供商。
游戏客户端可以本地存储连接信息,以便在客户端意外崩溃时尝试重连。 深入解析 或 为允许玩家加入正在进行的游戏,请考虑使用.
会话
我的服务器在就绪后显示 CPU 利用率 100%。
这可能不是问题,因为游戏引擎在服务器初始化期间往往会执行大量 CPU 密集型操作。如果在部署开始后 2-3 分钟内 CPU 使用率仍未下降,你可能需要优化服务器或增加应用版本的资源。
降低 tick 率可以通过处理更少的消息来帮助控制 CPU 使用率。
免费套餐的限制为 1.5 vCPU 和 3GB 内存(RAM)。
在创建新的应用版本时你可以增加分配的资源。你可以在我们的控制面板中复制你的应用版本并根据需要调整这些值,而无需重新构建服务器或镜像。 我的部署正在反复重启并显示错误
OOM 杀死
降低 tick 率可以通过处理更少的消息来帮助控制 CPU 使用率。
免费套餐的限制为 1.5 vCPU 和 3GB 内存(RAM)。
这是由于超出分配的内存量导致的。请考虑通过对象池、压缩或移除场景中不需要的对象来优化内存使用。
有时,我的服务器内存(RAM)使用会飙升到很高,这会是问题吗?
只要你保持在分配的应用版本内存额度内,这不是问题。
我的部署正在反复重启并显示错误超出分配的应用版本内存额度将导致
(见上文)。
同一台机器上运行的其他服务器会影响我的服务器性能吗?
不会,我们的平台确保分配的资源不会被其他工作室或共享基础设施上的其他服务器使用。使用 Edgegap,不会有“噪声邻居”的问题。
👉 后续步骤
停止部署 了解各种方法来 停止部署
在比赛结束且玩家离开后。 如果你按照本指南并使用我们的 Docker 扩展构建,你可以简单调用方法 FGenericPlatformMisc::RequestExit
。我们已在打包的镜像中添加了一个脚本来管理你的服务器进程,它会自动执行优雅的部署关闭。 要自定义服务器生命周期管理,请修改我们的 示例 StartServer.sh
脚本。 开发者工具 更喜欢从 Unreal 管理生命周期?请参见
以获取自我停止 API 蓝图。 端点存储 连接你的
以获取你的部署日志,否则它们将被删除!
注入的变量
- 由 Edgegap 自动提供, 匹配变量 - 在使用,
匹配器 时由 Edgegap 自动提供,
应用版本变量 - 由你可配置的自定义键值对。
// 服务器代码
服务器性能分析 部署, 部署要在 Edgegap 上理解和优化服务器性能问题,请探索 部署 以及更多可用的
工具。
你也可以在 Edgegap 上使用现有的 Unreal Engine 分析工具: 在你的 Unreal Engine 服务器中配置跟踪
(内置和自定义事件):
使用-tracefile将跟踪保存到服务器磁盘,上传到第三方存储并离线分析, 部署 或使用
1981通过 UDP 协议对内部端口
进行跟踪数据流式传输。 分析 和 内存洞察 和 虚幻引擎(Unreal Engine).
网络洞察
匹配服务
手动启动部署、粘贴 URL 和端口不足以支持实时游戏。 阅读更多关于匹配服务的内容以便在玩家上线时自动、准时地部署。
优化服务器构建
配置资源分块以将仅客户端资源与服务器资源隔离。
探索 Epic 提供的资源分块技术和建议 。
排除仅客户端使用且服务器运行不需要的资源和插件。
了解 构建时资源和插件排除.
。
审查你的内容烹制策略。 考虑 即时烹制(Cooking on the Fly,COTF)
以延迟烹制客户端资源并加快服务器构建。
实现关卡流式加载以减少运行时内存负载。 如果你的设计让玩家大多聚集在同一地图区域, 关卡流式加载可将服务器的内存使用量
减少超过 60%,并提升客户端性能!
仅包含服务器运行绝对需要的内容。 在你的镜像中复制未使用的文件会导致镜像膨胀、更长的上传时间、更慢的缓存速度以及整体服务器启动更慢。.
**/Packaged/* 考虑使用.
多阶段 Docker 构建(链接)
将大型服务器依赖项分离到单独的镜像以在多阶段构建中重用。Docker 会缓存每一层并在未特别指示上传此部分时重用前一版本并跳过上传,从而为你节省带宽和等待上传完成的时间。
如果你不确定为什么某个 Dockerfile 命令抛出错误,请尝试在本地调试。在问题发生前创建一个新阶段(添加第二个FROM命令),使用--target指示构建过程在有问题的阶段停止,然后docker exec -it {container} /bin/bash进入容器内的交互终端。随后,你可以在你的基础镜像中使用 shell 命令进一步调查(例如在 Ubuntu 上使用top
)。
自定义服务器镜像:你也可以添加自定义 Dockerfile,以便对镜像有更多控制,例如进行构建大小优化、移除多余依赖项或需要更复杂的启动流程。下面分享一些“自己动手”的提示和最佳实践。
最后更新于
这有帮助吗?

