Unity
通过实践学习并在 Edgegap 部署你的第一个专用服务器。在本指南结束时,你将以零成本使用 Edgegap 部署一个专用服务器。
✔️ 准备工作
在开始之前,请确保 创建一个 Edgegap 免费帐户 (无需信用卡)。
在你的开发机器上配置一些必需项:
⚙️ 1. 连接账户
☑️ 登录并确认 Unity 控制台中没有与 Edgegap 插件相关的新错误。
✅ 你现在可以继续下一步。
🔧 2. 构建游戏服务器
无论你使用的是 Windows、Mac 还是 Linux 机器,你都需要 为 Linux 运行时构建你的服务器,因为现在大多数云提供商(包括 Edgegap)都运行在 Linux 上。别担心,使用我们的插件完成此操作不需要 Linux 知识。
☑️ 验证你已安装所需的 Unity Linux 构建工具。
☑️ 编辑构建设置以 确保包含所有必需的游戏场景.
☑️ 可选:从 Edgegap 服务器托管菜单(在层级窗口中右键 / ➕ )将与网络代码相关的端口验证和环境引导脚本添加到你的初始服务器场景。

☑️ 一旦你对配置满意,点击 构建服务器,等待进程完成并确认 Unity 控制台中没有新错误。完成此步骤将导致 在项目根目录出现一个新文件夹 - Builds/EdgegapServer/ServerBuild .
✅ 你现在可以继续下一步。
🐋 3. 将服务器容器化
在一个开发团队中工作意味着要共享代码。当出现问题时,你最不想听到的是“在我机器上可以运行”。游戏服务器必须能在任何机器上可靠运行,因为成功的游戏服务器将运行在全球成千上万台服务器上。
为帮助使你的服务器可靠,我们使用 Docker —— 一种虚拟化软件,确保你的所有服务器代码依赖项直到操作系统级别在任何情况下或任何地点启动服务器时都保持完全一致。
☑️ 现在,先点击 验证 按钮以确保你已完成 开发者工具.
☑️ 你可以配置以下选项(或保留默认):
构建路径 是指向你的服务器构建产物的相对路径,暂时保留默认即可。
Docker 仅接受相对于项目根文件夹的构建路径, 将构建保留在项目文件夹内.
镜像名称 是你选择的唯一标识符,用于在发布前标记你的服务器构建。
通常,这将包含你的游戏名称,例如“my-game-server”。
镜像标签 是指向镜像特定版本的标识符。
“构建产物”一词有时用于指代你镜像的特定版本。
时间戳是标记的一个好选项,例如
2024.01.30-16.23.00-UTC.
Dockerfile 路径 可用于自定义镜像的配方。
我们建议暂时保留默认设置,你可以稍后在章节中阅读更多内容 Unity.
可选的 docker 构建参数 可用于进一步指示 Docker 有关更细微的细节。
我们建议暂时保留默认设置,你可以 稍后在 Docker 文档中阅读更多.
☑️ 一旦你对配置满意,点击 使用 Docker 容器化,等待进程完成并确认 Unity 控制台中没有新错误。完成此步骤将导致 在本地机器上出现新镜像。你可以在 Docker Desktop 的本地(默认)下的 Images 选项卡中验证,或在 docker CLI 中运行 docker images .
✅ 你现在可以继续下一步。
🧪 4. 在本地测试服务器
让我们尝试在本地(在你的机器上)部署并连接一个游戏客户端,以确保服务器镜像在我们上传和部署之前正常运行(上传和部署可能需要一些时间)。
☑️ 你可以配置以下选项(或保留默认):
服务器镜像标签 来自上一步。
默认使用你通过插件构建的最后一个标签。
可选的 docker 运行参数 可用于暴露多个端口,或在 macOS 机器上运行你的镜像。
如果需要,你可以为容器发布多个端口,只需为每个添加参数
-p {内部端口}/{协议}例如-p 8080/tcp -p 7770/udp以发布并映射你的服务器端口8080到一个随机外部端口用于 TCP 连接,并同时将服务器端口7777映射到一个随机外部端口用于 UDP 连接。在你的传输或网络代码特定设置中查找服务器端口配置。
如果你使用的是 ARM 架构的机器(macOS M1、M2、M3 等),你应该在可选的 docker 构建参数中看到包含此可选参数:
--platform=linux/amd64.
☑️ 一旦你对配置满意,点击 部署本地容器,等待进程完成,并确认 Unity 控制台中没有新错误。完成此步骤将导致 在你的开发机器上启动一个新容器 。
☑️ 现在是时候 将你的 Unity 编辑器游戏客户端连接到本地 docker 容器 以验证你的服务器镜像是否正常运行。找到你的网络代码客户端设置并输入:
localhost或127.0.0.1(在大多数情况下等效)代替服务器 IP,在 Docker Desktop / Containers / edgegap-server-test 中找到的随机化外部端口值。

☑️ 一旦你确认可以连接到本地服务器容器并且能够顺利游玩,你可以删除该容器 🗑️ 以释放机器上的资源供其他程序使用。
✅ 你现在可以继续下一步。
☁️ 5. 上传到 Edgegap
现在是将你的服务器上线部署的时候了!既然你的镜像可以成功承载玩家,我们就可以将其上传到 Edgegap 并开始在全球任意地点运行。在本指南中,我们将使用 Edgegap 的容器注册表 (镜像存储)。
☑️ 你可以配置以下选项(或保留默认):
应用名称 在 Edgegap 上可以与镜像名称相同或自定义。
我们暂时选择复制你的镜像名称。
应用版本 在 Edgegap 上可以与标签相同或自定义。
时间戳是应用版本名称的一个好选项,例如
2024.01.30-16.50.20-UTC.多个应用版本可以指向相同的镜像标签,例如
v1.1.0和dev.了解更多关于 应用与版本 稍后。
服务器镜像名称 来自步骤 Unity.
服务器镜像标签 来自步骤 Unity.
在以下位置查找存储在你机器上的任何镜像名称和标签 Docker Desktop / Images.
☑️ 一旦你对配置满意,点击 上传镜像并创建应用版本,等待进程完成,并确认 Unity 控制台中没有新错误。
☑️ 你将被带到我们的 仪表盘,在那里你可以配置可选设置。完成此步骤将导致 创建一个新的应用版本,并且你的 构建产物将被标记并上传到 Edgegap 的容器注册表.
☑️ 现在系统会提示你为新的应用版本定义一个端口。确保将与步骤中相同的服务器端口值设置为你的传输或网络代码特定设置中的值。 Unity 🚀 6. 部署到云端
✅ 你现在可以继续下一步。
☑️ 现在我们将进行最后测试并
这是本指南的最后一步,完成后您将在 Edgegap 云上部署一个服务器,来自世界任何地方的玩家都可以连接到该服务器。
☑️ 选择一个应用程序和版本 从上一步部署。
☑️ 一旦准备就绪,点击 部署到云端,等待达到 部署。完成此步骤将会 新的部署正在启动 在你的 Edgegap 帐户上。
☑️ 验证控制台输出中没有新的错误。同时确保你的 部署 没有显示任何错误,并且你的 部署 未显示 100% 资源利用率(vCPU 或内存),否则新的玩家连接可能会被拒绝,或你的服务器陷入重启循环。请参阅下面的故障排除步骤以解决任何问题。
将你的 Unity 编辑器游戏客户端连接到你的云部署 。从部署的以下项输入游戏客户端连接详细信息:主机
URL 指向服务器的 IP,通常在 NetworkManager
组件中。外部端口映射到 服务器的内部监听端口 ,通常在传输组件中。无法将客户端连接到服务器 -

测试时请禁用 VPN 以获得更真实的环境并接收 低延迟部署.
☑️ 一旦您确认能够毫无问题地连接到部署并完成测试, 停止您的部署 以释放您帐户中的容量以供下次构建使用。
如果遇到问题, 检查您部署的仪表板日志.
如果您无法找出问题所在,我们会在我们的 社区 Discord 碰到困难?我们在我们的
🙌 恭喜您在 Edgegap 上完成第一次部署!如果您想了解更多,请继续阅读。
👉 接下来的步骤
一旦你有了可运行的客户端/服务器设置,确保 保存你的项目副本 (使用像 git 这样的版本控制软件),以便在遇到问题时你始终可以追溯你的步骤。
继续阅读以了解更多与服务器生命周期和可发现性相关的主题。
停止部署
了解各种方法来 停止部署 一旦比赛结束并且玩家离开。
注入变量
通过访问注入的环境变量读取部署 ID、服务器 IP 地址、服务器位置等有用信息。每个部署都会自动包含:
通过检查 Edgegap 变量是否设置来验证当前实例是游戏客户端还是服务器 :
匹配器
手动启动你的部署并粘贴 URL 和端口并不足以用于在线游戏。
阅读更多关于匹配的内容 以便自动按需部署,正好在玩家上线时。优化服务器构建
仅重新构建自上次构建以来更改的资源。
考虑使用
Unity 的增量构建 以加快构建时间。 只包含服务器运行所绝对需要的内容。
Unity 的增量构建 以加快构建时间。 只包含服务器运行所绝对需要的内容。
在镜像中复制未使用的文件会导致镜像膨胀、更长的上传时间、更慢的缓存速度以及整体服务器启动变慢。
查看 Docker 镜像优化建议 禁用网格的静态合批以减少镜像大小。.
禁用静态合批以加快构建、上传和部署速度。
将网格压缩设置为 高 以加快构建、上传和部署。
实现有条件的延迟加载资源。
通过
将仅客户端的资源排除在外 将纹理和网格设置为禁用 CPU 读写.
Unity 的增量构建 Unity Addressables 用于客户端构建,以通过 即时加载资源或在服务器构建中通过检查 未捕获的服务器异常会导致部署的容器重启并使 TLS 安全失效。在这种情况下,.
Unity 的增量构建 来跳过加载某些资源.
多阶段 Docker 构建(链接)
将大型服务器依赖项分离到单独的镜像以在多阶段构建中重用。Docker 将缓存每一层并简单地重用先前版本,除非特别指示,否则将跳过上传该部分,从而为你节省带宽和上传完成等待时间。
如果你不确定为什么你的某个 Dockerfile 命令抛出错误,尝试在本地调试。在问题发生之前创建一个新阶段(添加第二个FROM命令),使用--target指示构建过程在有问题的阶段停止,然后docker exec -it {container} /bin/bash进入容器内的交互终端。之后,你可以在基础镜像中使用 shell 命令进一步调查(例如在 ubuntu 上使用top
)。
自定义服务器镜像 Unity我们还支持为需要更多控制其镜像(由于构建大小优化、额外依赖或需要更复杂的启动流程)的用户添加自己的 Dockerfile。你可以在步骤中可选地提供自定义 Dockerfile 的路径。我们现在将分享一些“自己动手”的技巧和最佳实践。
使用 Websockets 或 HTTPS 请求时遇到问题?
如果你看到
Curl 错误 35:证书握手失败。致命错误。UnityTls 错误代码:7不要灰心,这是包含过期根证书的旧基础(如果你不确定为什么你的某个 Dockerfile 命令抛出错误,尝试在本地调试。在问题发生之前创建一个新阶段(添加第二个)镜像的已知问题。你可以通过更新到较新的基础镜像版本(例如ubuntu:22.04)并运行update-ca-certificates来修复它,在你的 Dockerfile 中添加以下内容:
始终确保您使用的是可正常工作的服务器构建。
在假设问题与自定义 Dockerfile 有关之前,请确保您的 Unity 服务器构建可以启动,并且 Unity 中的构建过程没有抛出任何异常或错误。
在上传之前务必先进行本地测试。
在本地测试镜像可以为您节省大量等待上传完成的时间。它也完全免费 ✨ 因为不需要任何 Edgegap 资源。
在本地测试时,请确保正确设置内部端口:
确保掌握基本要点。每个 Dockerfile 都需要一些基本命令:
FROM {image}是您的基础镜像,对于 Unity 项目我们通常使用长期支持的 Linux,但任何基于 Linux 的基础镜像都可以。这些通常是存放在 dockerhub 上的公共镜像。Dockerfile 参考在此处。 Dockerfile 参考在此处.COPY {source} {destination}将您的 Linux 服务器构建从主机复制到镜像内部,以便您稍后可以启动它。 Dockerfile 参考在此处.USER {user}应当跟在 useradd(ubuntu)命令 或等效命令之后,最好不要以root身份运行所有内容,以更安全为宜。 Dockerfile 参考在此处.CMD {command}将是最后一行,很可能会调用一个StartServer.sh或某种启动脚本,以确保在所有设置完成后服务器正确初始化。 Dockerfile 参考在此处.切勿使用
VOLUME- 这样您将无法在 Edgegap 上挂载任何本地存储,请改用我们的端点存储功能并使用 S3 存储桶,参见 端点存储,EXPOSE 7777/UDP不是必需的!这实际上不会使容器外部可用内部服务器端口,它只是对开发者的提示,端口需要被在本地使用以下命令测试时发布:
docker run <image> -p 7777/udp,或在 Edgegap 端口映射.
中映射。 将参数的声明延迟到尽可能晚的时刻。由于服务器构建时间较长,可配置性优于可组合性。
将此方法应用于 Dockerfile 命令以更快地构建和上传。
场景:您需要定义诸如部署阶段、版本、游戏模式、地图、每台服务器的玩家数、备份频率或类似参数。
糟糕的解决方案:为每一种参数组合创建单独的镜像。您会把所有时间都花在重建镜像上,而这种方法带来的好处非常有限。
更好的解决方案——即时替换配置参数:
部署参数——在部署前提供——匹配选择器作为环境变量传入,或由您自定义的会话管理系统在部署时传入环境变量,
版本参数——在某个应用版本的所有部署间共享——部署阶段、制品标签、第三方密钥和端点等;然后
单一镜像——包含并在启动时加载所有配置选项。
切勿在 Edgegap 部署上运行数据库。
Edgegap 部署并不适合长期运行的进程,且可能在长时间运行后被终止而不另行通知。以这种方式运行的数据库(即使是分布式的)可能会被终止并导致不可逆的数据丢失。如果您需要数据库,请考虑第三方 DBaaS。 托管集群 考虑使用我们的
最后更新于
这有帮助吗?



