For the complete documentation index, see llms.txt. This page is also available as Markdown.

Godot - 入门指南

通过实践学习,并在 Edgegap 上部署你的第一个专用服务器。到本指南结束时,你将零成本使用 Edgegap 部署一个专用服务器。

✔️ 准备工作

在开始之前,请确保 在 Edgegap 创建一个免费账户 (无需信用卡)。

在你的开发机器上配置一些基本设置:

安装 Docker Desktop(或 Docker CLI)
安装 Edgegap 的 Godot 专用服务器快速入门插件

该插件已在 Godot 4.x.x 及更高版本上测试,并支持这些版本。

选项 1)从 ZIP 安装:

  1. 将 ZIP 解压到你项目的 addons 文件夹中。

要更新通过 ZIP 安装的插件,请删除旧插件并替换为新的 ZIP。

选项 2)从源代码安装:

  1. 将我们的插件仓库克隆到你项目的 addons 文件夹中。

git clone git@github.com:edgegap/edgegap-godot-plugin.git

要更新通过 git 安装的插件,请在插件文件夹中打开命令行并运行 git pull.

在 Project / Project Settings / Plugins 下启用你新的 Edgegap Servers Quickstart 插件。 一个名为“Edgegap”的新标签页将出现在你右侧面板中,位于 Inspector 旁边。如果你之后关闭了该面板并需要重新打开,可在 Project / Tools / Edgegap 下找到该选项。

⚙️ 1. 连接账户

☑️ 登录并确认你的 Output 中没有与 Edgegap 插件相关的新错误。

✅ 你现在可以继续下一步。

🔧 2. 构建游戏服务器

无论你使用的是 Windows、Mac 还是 Linux 机器,你都需要 为 Linux 运行时构建你的服务器,因为如今大多数云服务提供商(包括 Edgegap)都运行在 Linux 上。别担心,使用我们的插件完成这一步不需要任何 Linux 知识。

☑️ 验证导出模板,以确保插件已正确设置你的 Linux 服务器模板。

高级用户 - 可选地自定义 导出模板。注意!这可能会破坏你的构建。

☑️ 向你的项目添加新的启动脚本,以便自动作为专用服务器启动。 在你的主场景下创建一个新节点,并在 Inspector / Script / Load 下链接新脚本。

这是一个最小模板脚本,可扩展以满足你项目的需求。

这是一个针对 netfox forest brawl 示例的启动脚本自定义版本。

☑️ 一旦你对配置满意,就点击 构建服务器,等待进程完成并确认你的 Output 中没有新的错误。完成这一步后,你的项目中将出现一个 新的构建出现在你的项目中,位于文件夹 build.

✅ 你现在可以继续下一步。

🐋 3. 将服务器容器化

在一个开发者团队中工作意味着要共享代码。当出现问题时,您最不想听到的就是“在我的机器上可以运行”。游戏服务器必须能够在任何机器上可靠运行,因为成功的游戏服务器会在世界各地成千上万台服务器机器上运行。

为了帮助使您的服务器可靠,我们使用 Docker —— 一种虚拟化软件,确保您的所有服务器代码依赖项直到操作系统级别始终完全相同,无论服务器如何或在哪里启动。

我们建议观看 “永远不要本地安装”(视频). 使用 Docker 不需要使用 Dockerhub。Docker ≠ Dockerhub。把 Docker 想象成一个编程引擎,把 Dockerhub 想成它的应用商店。

☑️ 首先点击 验证 Docker 按钮,以确保你已完成 Godot.

安装 Docker Desktop(或 Docker CLI)

☑️ 你可以配置以下选项(或保留默认值):

  • 镜像名称 是你自定义的唯一标识,用于在发布前标记你的服务器构建。

    • 通常,这会包含你游戏的名称——例如“my-game-server”。

  • 镜像标签 是指向你镜像特定版本的标识。

    • “构建产物”一词有时用于指代镜像的特定版本。

    • 时间戳是标记的绝佳选择,例如 2026.07.30-16.25.00-UTC .

  • Dockerfile 路径 可用于自定义你镜像的构建配方。

    • 我们建议现在先保留默认设置,你可以稍后在以下部分了解更多: Godot.

  • 可选的 docker 构建参数 可用于进一步向 Docker 说明更细致的选项。

从源代码重建 将自动构建并容器化,以 加快你下一次构建.

☑️ 一旦你对配置满意,就点击 使用 Docker 容器化,等待进程完成并确认你的 Output 中没有新的错误。完成这一步后,你的项目中将出现一个 新镜像出现在你的本地机器上。你可以在 Docker Desktop 的 Local(默认)下的 Images 标签页中验证,或者在 docker CLI 中运行 docker images .

✅ 你现在可以继续下一步。

🧪 4. 在本地测试服务器

让我们先在本地(在你的机器上)尝试部署并连接游戏客户端,以确保服务器映像在我们上传和部署(可能需要一些时间)之前能正常工作。

☑️ 你可以配置以下选项(或保留默认值):

  • 服务器镜像标签 来自上一步。

    • 默认使用你通过插件构建的最新标签。

    • ☁️ 出现在镜像名称前面表示该镜像已上传。

  • 可选的 docker run 参数 可用于暴露多个端口,或在 macOS 机器上运行你的镜像。

    • 如果需要,你可以为容器发布多个端口,只需添加参数 -p {internal port}/{protocol} ,每个端口都这样设置,例如 -p 8080/tcp -p 7777/udp 以发布并映射你的服务器端口 8080 到一个随机的外部端口,用于 TCP 连接,并且服务器端口 7777 同时到一个随机的外部端口,用于 UDP 连接。 在你的启动脚本中查找服务器端口配置。

    • 如果你使用的是 ARM 架构的机器(macOS M1、M2、M3 等),你应该会在可选的 docker 构建参数中看到包含此可选参数: --platform=linux/amd64 .

☑️ 一旦你对配置满意,就点击 部署本地容器,等待进程完成,并确认你的 Output 中没有新的错误。完成这一步后,你的项目中将启动一个 新的容器正在启动 在你的开发机器上。

更多详情请参见 Docker Desktop / Containers,或 Docker CLI 命令 docker ps .

☑️ 现在是时候 将你的 Godot 编辑器游戏客户端连接到本地 docker 容器 以验证你的服务器镜像是否正常运行。找到你的客户端连接信息并输入:

  • localhost0.0.0.0 (在大多数情况下等同)代替服务器 IP,

  • Docker Desktop / Containers 中找到的随机外部端口值。

☑️ 一旦你确认可以连接到本地服务器容器并且能够正常游戏,就可以删除该容器 🗑️ 以释放机器上的资源供其他程序使用。

✅ 你现在可以继续下一步。

☁️ 5. 上传到 Edgegap

是时候将您的服务器上线了!既然您的镜像现在可以成功托管玩家,我们就可以将其上传到 Edgegap 并开始在世界任何地方运行。在本指南中,我们将使用 Edgegap 的容器注册表 (镜像的存储)。

☑️ 你可以配置以下选项(或保留默认值):

  • 应用名称 在 Edgegap 上可以与镜像名称一致,也可以自定义。

    • 我们现在选择复制你的镜像名称。

  • 应用版本 在 Edgegap 上可以与标签一致,也可以自定义。

    • 时间戳是应用版本名称的绝佳选择,例如 2024.01.30-16.50.20-UTC .

    • 多个应用版本可以指向同一个镜像标签,例如 v1.1.0dev .

    • 了解更多关于 应用与版本 稍后。

  • 服务器镜像 来自步骤 Godot.

☑️ 一旦你对配置满意,就点击 上传镜像并创建应用版本,等待进程完成,并确认你的 Output 中没有新的错误。

☑️ 你将被带到我们的 仪表板,在那里你可以配置可选设置。完成这一步后将会 创建一个新的应用版本,并且你的 构建产物将被打标签并上传到 Edgegap 的容器注册表.

  • 应用版本 在 Edgegap 上可以与标签一致,也可以自定义。

    • 时间戳是应用版本名称的绝佳选择,例如 2024.01.30-16.50.20-UTC .

    • 多个应用版本可以指向同一个镜像标签,例如 v1.1.0dev .

    • 了解更多关于 应用与版本 稍后。

☑️ 现在系统会提示你为新的应用版本定义一个端口。请确保将服务器端口值设置为与步骤 Godot 相同(默认为 7777)。

✅ 你现在可以继续下一步。

🚀 6. 部署到云端

这是本指南的最后一步,完成后您将在 Edgegap 云上部署一个服务器,来自世界任何地方的玩家都可以连接到该服务器。

☑️ 选择一个应用程序和版本 从先前的步骤部署。

☑️ 一旦准备好,请点击 部署到云端,等待达到 部署。完成此步骤将导致 一个新的部署被启动 在您的 Edgegap 帐户上。

☑️ 验证控制台输出中没有新的错误。同时确保您的 部署 没有显示任何错误,并且您的 部署 未显示 100% 的资源利用率(vCPU 或内存),否则新的玩家连接可能会被拒绝,或您的服务器可能会陷入重启循环。请参阅下面的故障排除步骤以解决任何问题。

☑️ 现在我们将进行最后的测试,并 将你的 Godot 编辑器游戏客户端连接到云端部署。找到你的客户端连接信息并输入:

您在 Edgegap 云上的部署的外部端口将随机选择,以便在潜在攻击者(黑客)造成损害之前减缓并检测到他们。

☑️ 一旦您确认可以无问题连接到您的部署并完成测试, 停止您的部署 以释放您账户中的容量用于下一次构建。

🙌 恭喜您在 Edgegap 上完成首次部署!如果您想了解更多,请继续阅读。

👉 后续步骤

一旦你有了可用的客户端/服务器设置,请确保 保存你的项目副本 (使用诸如 git 之类的版本控制软件),以便在遇到问题时总能追溯你的步骤。

继续阅读以了解更多与服务器生命周期和可发现性相关的主题。

如果你需要帮助, 请通过 Discord 联系我们。关于实时游戏支持,请查看我们的 工单系统.

停止部署

当比赛结束(或玩家离开)后,你可以停止部署以节省成本。 空跑或只填充了一部分玩家会不必要地增加你的成本!

注入变量

通过访问注入的环境变量来读取有用信息,例如部署 ID、服务器 IP 地址、服务器位置等。每个部署都会自动包含:

会话自动化

使用以下任一方式,自动化热门游戏流程,以管理会话并按需扩展:

匹配:

  • 更短的回合

  • 按需对局

  • 技能评级和/或 自定义规则

服务器浏览器:

  • 持久模式或回合制

  • 社交区域枢纽

  • 自动分配和/或 自定义搜索

自定义后端:

优化使用

以下是一些帮助你开始优化服务器使用的建议:

更高的 tick 率意味着更多更新,需要更多 CPU 使用和数据外发。

  • Godot 默认每秒 60 tick,这对于快节奏射击游戏或高度依赖低延迟的游戏非常适合。其他类型的游戏可能只需要 30 Hz 甚至 15 Hz。

  • 更高 tick 率的隐性成本是在每秒内进行更多 CPU 周期来对数据进行(解)包,以及重新计算服务器权威属性和流程。如果你的游戏每局有很多玩家(10+)、很多带碰撞体的节点、复杂的物理模拟,或大量机器人对手/队友,请谨慎处理。

  • 在你的网络代码设置中用不同的 tick 率测试游戏响应速度。对于 ENET,请参见 Project Settings / Physics / Common / Physics Ticks Per Second。

如何选择合适的网络协议?先让它可用,再让它更好。

  • Godot 内置的 ENET 和默认 UDP 协议是一个很好的默认选择,能够在最广泛的设备和使用场景中提供性能与兼容性。

  • 某些游戏可能希望尝试 TCP、WS、WebRTC 或其他协议。这可能提高你在移动设备和主机上的连接可靠性,尤其是在公共网络上(蜂窝网络、公司网络、咖啡馆、酒店 Wi‑Fi 等),但这肯定需要额外的开发工作。问问自己这对你的目标受众是否至关重要。

  • 并行使用多种协议,以确保重要更新优先传递,可能会改善某些类型游戏的玩家体验(例如 MMO),但这会带来大量额外开发工作,并可能为你的项目增加巨大的复杂性。

  • 谨慎选择战场,游戏开发从不缺少挑战。

自定义镜像

我们还支持为需要更高镜像控制能力的用户添加自己的 Dockerfile,例如由于构建大小优化、额外依赖项,或需要更复杂的启动流程。你可以在步骤中可选地提供自定义 Dockerfile 的路径 Godot。现在我们将分享一些“自己动手”的技巧和最佳实践。

始终确保您正在使用可运行的服务器构建。

  • 在认为问题与自定义 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 不是必需的!这并不会真正使容器外部能够访问内部服务器端口,它只是对开发者的一个提示,并且在本地测试时该端口需要被

将参数声明延迟到最晚的可能时刻。由于服务器构建时间较长,可配置性优于可组合性。 将此方法应用于 Dockerfile 命令以更快地构建和上传。

  • 场景:您需要定义诸如部署阶段、版本、游戏模式、地图、每台服务器的玩家数量、备份频率或类似参数。

  • 糟糕的解决方案:为参数的每一种组合创建单独的镜像。您会花大量时间重建镜像,而这种方法带来的收益很少。

  • 更好的解决方案 — 及时替换配置参数:

    1. 部署参数 — 在部署前提供 — 比如作为环境变量传入的匹配器选择器,或在部署时由您自定义的会话管理系统传入的环境变量,

    2. 版本参数 — 在某个应用版本的所有部署中共享 — 部署阶段、构件标签、第三方密钥和端点等;然后

    3. 单一镜像 — 在启动时包含并加载所有配置选项。

切勿在 Edgegap 部署上运行数据库。

  • Edgegap 部署并不适合长期运行的进程,可能在长时间运行后被终止且不会事先通知。以这种方式运行的数据库(即使是分布式的)可能会被终止并导致不可逆的数据丢失。如果您需要数据库,请考虑第三方的 DBaaS。

  • 考虑使用我们的 托管集群 来托管数据库和长期运行的服务。

最后更新于

这有帮助吗?