了解Edgegap的工作原理

了解Edgegap的工作原理

Photon Fusion 2

BR200

部署至 Edgegap

已发布

已发布

已发布

BR200:在 Edgegap 专属服务器上运行 Photon Fusion 2 大逃杀游戏

BR200:在 Edgegap 专属服务器上运行 Photon Fusion 2 大逃杀游戏

BR200 是 Photon 推出的一款支持多达 200 名玩家的第三人称大逃杀示例项目,基于 Photon Fusion 2 构建。它本身已经可以作为无头专用服务器(headless dedicated server)运行。Edgegap 的工具包则将该服务器运行在 Edgegap 上,每场比赛进行一次部署。

该工具包不会修改任何 BR200 或 Fusion 代码。玩家仍然通过 Photon Cloud 进行匹配,并使用您自己的 Photon App ID。仅仅是服务器发生了改变:它运行在 Edgegap 上,而不是玩家的机器上;客户端也直接连接到该服务器,而不是通过 Photon 中继。

Edgegap 的网络覆盖 615 多个边缘云节点(了解更多)。每个服务器都会部署在离玩家最近的最佳可用节点上,并在比赛结束时自动停止,计费也会随之停止。

Photon 的 Fusion 2 文档已将 Edgegap 列为游戏会话托管提供商。

支持平台: Linux 专用服务器(Docker,linux/amd64)。已在 Windows 客户端上经过测试,在 Windows 11 环境下使用 Unity 6000.3.11f1 构建。该工具包采用 MIT 许可;BR200 来自 Unity Asset Store,仍受 Asset Store EULA 和 Photon 条款约束。仓库中不包含任何 BR200 或 Fusion 代码。

工作原理

  1. 您使用玩家的公共 IP 启动 Edgegap 部署。Edgegap 会将其部署在靠近玩家的位置。

  2. 工具包的启动脚本读取 Edgegap 的变量,并使用其自身选项启动 BR200:-dedicatedServer、绑定地址 0.0.0.0、端口 7777/UDP,以及将部署地址作为会话名称。

  3. 该脚本选择距离部署位置最近的 Photon 区域。服务器在该区域的 Photon Cloud 中注册其会话。

  4. 客户端使用相同的 Photon App ID、App Version 和区域,通过名称(或在菜单的服务器列表中)找到该会话,并直接(Direct)连接到 Edgegap 服务器。

  5. 比赛结束且 BR200 退出时,脚本会请求 Edgegap 停止该部署。

该工具包新增的内容:

路径

作用

Assets/EdgegapBR200/Editor/BR200ServerBuilder.cs

添加 Tools > Edgegap BR200:检查项目(IL2CPP 服务器、Linux 工具链、不安全代码、场景、App ID、Peer Mode),并将 Linux 服务器构建到 Builds/EdgegapServer。

edgegap/Dockerfile

以非 root 用户运行服务器的 Ubuntu 22.04 镜像。

edgegap/start-server.sh

将 Edgegap 的 ARBITRIUM_* 变量映射到 BR200 的命令行选项,选择 Photon 区域,转发停止信号,并在比赛结束时停止部署。

.dockerignore, .gitattributes

仅将服务器构建文件发送给 Docker;保留 Linux 换行符。

scripts/

构建、打包和推送,本地运行,在容器中运行测试。

examples/

Edgegap API 的应用版本请求体和部署请求。

tests/start-server.test.sh

针对启动脚本的 46 项检查。无需 Unity。

Photon Fusion 2

x

Edgegap

得到 Mirror Networking 创建者的完全认可

已在 Photon Fusion 2 文档中列出

已在 Photon Fusion 2 文档中列出

Photon 的 Fusion 2 文档将 Edgegap 列为 Fusion 专用服务器的游戏会话托管提供商。

无需信用卡。免费版包含部署真实游戏服务器所需的资源。

无需信用卡。免费版包含部署真实游戏服务器所需的资源。

BR200 main menu with a soldier character, from Photon Fusion 2's battle royale sample, with the Unity and Photon logos.

Photon 的 BR200 大逃杀游戏,每场比赛都在其独立的 Edgegap 专用服务器上进行。

分步指南

运行示例

1. 开始之前

  • 一个免费的 Edgegap 账户。

  • 来自 Unity Asset Store 的 BR200。该代码仓库是一个工具包,不包含游戏本身。

  • 包含 Linux Dedicated Server 构建模块的 Unity。已在 Unity 6000.3.11f1、BR200 2.1.0 和 Fusion 2.1.1 上进行过测试。

  • 来自 Photon 控制面板 的您自己的 Photon Fusion App ID。每个开发者都需要拥有自己的 ID;该工具包绝不会自带提供。

  • Docker Desktop。

  • 可选:Edgegap Unity 插件(如果您更倾向于直接在编辑器中进行构建和上传)。

  • 克隆该工具包。

Git:Unity 需要在系统的 PATH 环境变量中配置 Git 客户端(2.14.0 或更高版本),以便从 Git URL 安装包(例如 Edgegap 插件)。macOS 通常已预装(Xcode 命令行工具);在 Windows 上,请安装 Git。

2. 添加套件并设置 Photon

将 Assets/EdgegapBR200、edgegap/、scripts/、.dockerignore 和 .gitattributes 复制到 BR200 项目根目录下,与 Assets/ 并列。

然后在 Unity 中:

  1. Tools > Fusion > Realtime Settings:粘贴您的 Fusion App ID,并记下 App Version。服务器和客户端必须共享相同的 App ID、App Version 和 Photon 区域,否则它们将无法找到彼此。

  2. Tools > Fusion > Network Project Config:将 Peer Mode 设置为 Single。

  3. 服务器必须使用 IL2CPP,这是 BR200 的默认设置。在 Mono 服务器上,BR200 的 RPC 会失败,玩家将永远无法获得角色。要在 Windows 上使用 Unity 6000.3 或更高版本构建 Linux IL2CPP,请在 Package Manager 中添加 com.unity.toolchain.win-x86_64-linux 和 com.unity.sdk.linux-x86_64(+ > Add package by name)。

  4. 运行 Tools > Edgegap BR200 > Check Project 并修复其报告的问题。

您无需编辑 Loader 场景或任何脚本:服务器的模式、地址、端口、会话和区域均来自命令行。

3. 构建服务器并将其部署到 Edgegap

通过终端(Windows 上可使用 Git Bash)或通过Tools > Edgegap BR200 > Build Linux Server构建 Linux 服务器。在我们的测试中,IL2CPP 构建耗时 56 分钟:

scripts/build-server.sh

打包并推送镜像。首先使用来自Container Registry 页面的凭据登录:

scripts/package.sh registry.edgegap.com/<project>/br200

如果您改用 Edgegap 插件,请将其Containerize步骤指向 edgegap/Dockerfile,并将构建路径保持为 Builds/EdgegapServer。

在控制面板中,创建应用程序 br200 以及一个版本,其标签为脚本打印的内容:

  • 一个端口:名称 gameport,7777,UDP。

  • 重启策略 never。比赛结束时部署随即终止。

  • 最大持续时间略高于您最长的一场比赛(示例中为 60 分钟)。

  • 起始配置为 1 vCPU 和 2 GB。完整的 200 人比赛规模尚未测定。

examples/app-version.json 包含了用于 API 的相同设置。

4. 开始比赛并连接

首先在您自己的计算机上测试该镜像,使用与实际部署相同的变量:

scripts/run-local.sh eu

在本地,客户端显示的连接类型为 Relayed:同一台机器上的客户端无法直接访问 Docker Desktop 的地址。而在 Edgegap 上,相同的镜像会显示为 Direct。

然后从控制面板、插件或 API(examples/deploy-request.json)启动部署,并带上玩家的公网 IP。其 FQDN(例如 0a1b2c3d4e5f.pr.edgegap.net)也是 BR200 会话名称。前几行日志会显示绑定地址、公网地址以及服务器选择的 Photon 区域。

要加入游戏,请打开设置为 Loader 的 Batch Mode Scene 的场景,并在 Standalone Manager 中将 Game Mode 设置为 Client,Server Name 和 Session Name 设置为该 FQDN,并将 Region 设置为服务器所在的区域。然后开始游戏。(从 Menu 场景的服务器列表加入应该也可以,但未经测试。)

BR200 在服务器启动时会开始一个 120 秒的等待计时器。部署就绪(Ready)后请尽快连接。

在已连接的客户端中按下 Tab 键:悬浮窗中的 CT(连接类型)应显示为 Direct。

5. 将其添加到你自己的 Fusion 游戏中

该套件是一个可正常运行的参考:您的编码智能体(coding agent)将从已在 Edgegap 上运行过的文件开始,因此它建立在经过测试的设置之上,而不是盲目猜测。

对于 BR200,该套件没有更改任何游戏代码(参见“工作原理”中的表格)。对于您自己的 Fusion 游戏,以下是需要移植的部分:

  1. 在 GameMode.Server 模式下无头运行(headless)。通过命令行选项或环境变量将运行程序作为专属服务器启动(edgegap/start-server.sh 显示了相应的映射)。

  2. 绑定 0.0.0.0。在固定端口(7777/UDP)上将 StartGameArgs.Address 设置为 0.0.0.0。Fusion 会自行查找公网地址,客户端通过 Direct(直连)方式连接。127.0.0.1 会强制使用 Photon 中继;而绑定的部署公网 IP 则会失败。

  3. 以部署名称命名会话。使用 FQDN(<ARBITRIUM_REQUEST_ID>.pr.edgegap.net),以便客户端能够通过 Photon 找到它。

  4. 从 ARBITRIUM_DEPLOYMENT_LOCATION 选择靠近部署的 Photon 区域(即脚本的 auto 模式)。

  5. 比赛结束时停止。当服务器退出时,携带 ARBITRIUM_DELETE_TOKEN 调用 ARBITRIUM_DELETE_URL,并且切勿输出环境变量。

  6. 使用 IL2CPP 构建服务器,并以 edgegap/Dockerfile 为模板进行容器化。

配合您的智能体:

“加载 edgegap skill,然后加载 edgegap-fusion。以 github.com/edgegap/netcode-game-sample-photon-fusion2-battleroyale-200 为参考,使我的 Fusion 2 游戏能够在 Edgegap 上作为无头 GameMode.Server 运行:在端口 7777/UDP 上绑定 0.0.0.0,使用部署的 FQDN 作为会话名称,选择离部署最近的 Photon 区域,在比赛结束时停止部署,并构建一个 IL2CPP Linux 服务器镜像。”

有关手动执行每个步骤的详细信息,请参阅 Photon Fusion 2 集成指南。

6. 玩家如何找到服务器

對局配對保留在 Photon Cloud 上。Edgegap 部署充当游戏服务器:它向 Photon 注册其会话,客户端通过会话名称、App ID、App Version 和区域找到它。对于此示例,您不需要 Edgegap 的配对器,并且它尚未经过 Fusion 测试。

  • 会话名称:默认为部署的 FQDN。设置 BR200_SESSION 进行更改。

  • 区域:auto(默认值)会选择距离部署最近的 Photon 区域。如果您的客户端使用固定区域,请将 BR200_REGION 设置为诸如 eu 的代码,或者使用 BR200_REGION_ALLOWLIST 限制 auto。best 则允许 Fusion 进行 ping 测速。

  • 比赛设置:BR200_MAX_PLAYERS(1 至 200)、BR200_MODE(battleRoyale、deathmatch 或 elimination)、BR200_SCENE,在应用程序版本或单个部署上设置。

您游戏的游戏后端或大厅决定何时启动部署,并将该会话名称和区域提供给玩家。如需在您自己的游戏中实现该流程,请参阅 Photon Fusion 2 集成指南。

已知限制

  • 尚未测试 200 名玩家。测试运行的是双人比赛。尚未对完整的 200 人比赛所需的 CPU 和内存进行评估:1 vCPU / 2 GB 仅为一个起点。

  • 仅测试了一张地图。Edgegap 上仅运行了 GenArea7。

  • 未测试菜单加入。客户端通过 Standalone Manager 加入。菜单的服务器列表应该可以正常工作,但尚未经过测试。

  • 仅限 Windows 构建主机。在 macOS 或 Linux 上构建尚未经过测试。

  • 120 秒计时器。BR200 在服务器启动时开始倒计时;稍后加入的玩家将被视为已被淘汰。

  • 服务器必须是 IL2CPP。Mono 服务器只需几分钟即可构建完成,但会损坏 BR200 的 RPC。

测试了什么

于 2026 年 10 月 19 日和 20 日在 Edgegap 上进行了端到端测试,配置包括 BR200 2.1.0、Fusion 2.1.1(内部版本 2177)、Unity 6000.3.11f1、Windows 11 以及 Docker Desktop。客户端为无头(headless)Windows IL2CPP 构建版本。

  • 构建:通过“Check Project and Build Linux Server”在 56 分钟内生成了 IL2CPP Linux 服务器。

  • 本地容器:两个客户端加入且无任何异常(本地预期为 CT 中继模式,即 CT Relayed)。

  • Edgegap:在多伦多(区域 cae)和纽瓦克(区域 us)进行了部署。每个节点均有两个客户端通过 CT 直连(Direct)加入。在双人大逃杀模式中,一名客户端离开后,另一名客户端显示游戏结束(Game Over),且部署在启动 2.5 分钟后自动停止。

  • 启动脚本:46 项检查,无需 Unity:

bash tests/start-server.test.sh

常见问题

关于在 Edgegap 上运行 Photon BR200 的常见问题。

为了在 Edgegap 上运行,我需要修改 BR200 的代码吗?

不。BR200 已经支持专用服务器的命令行选项。Edgegap 的工具包添加了一个编辑器构建工具、一个 Dockerfile 以及一个用于传递这些选项的启动脚本,并且不会更改任何 BR200 或 Fusion 代码。

Edgegap 上的 BR200 是否使用 Edgegap 的匹配系统?

不。對局配對保留在 Photon Cloud 上。Edgegap 服务器向 Photon 注册其会话,客户端通过会话名称和区域找到它,然后直接连接到服务器。

为什么我的客户端显示 CT 中继?

在 Edgegap 上,这通常意味着服务器绑定了 127.0.0.1。请像套件所做的那样绑定 0.0.0.0。在本地 Docker Desktop 测试中,出现 Relayed(中继)是预期的;相同的镜像在 Edgegap 上则会显示 Direct(直连)。

BR200 服务器可以使用 Mono 构建吗?

虽然可以成功构建,但 BR200 的 RPC 在 Mono 服务器上会失败,导致玩家永远无法获得角色。请使用 IL2CPP(BR200 的默认设置)来构建服务器。

客户

了解更多已接入 Edgegap 的客户案例

提供 31 个从其他平台迁移至 Edgegap 的工作室案例研究。

他们选择 Edgegap 的关键原因

了解 Edgegap 自动化游戏服务器编排如何带来无缝的多人游戏体验。

费用

定价

定价

通过混合编排优化成本与性能

通过混合编排优化成本与性能

通过混合编排优化成本与性能

边缘云

按需

$0.00115

/ vCPU

/ 分钟

按分钟计费,仅按实际使用量收费

只有在玩家在线玩游戏时才需付费。0 个活动服务器 = $0

在全球 615 多个边缘云节点中按实例部署游戏服务器。零承诺。

只需添加信用卡。

边缘云

按需

$0.00115

/ vCPU

/ 分钟

按分钟计费,仅按实际使用量收费

只有在玩家在线玩游戏时才需付费。0 个活动服务器 = $0

在全球 615 多个边缘云节点中按实例部署游戏服务器。零承诺。

只需添加信用卡。

专属物理机集群 (裸金属)

预留容量

$0.0261

/ vCPU

/ 小时

按月计费,始终开启

每个主机每月 $280(12个月标准价),或按月支付每月 $350

通过无出站流量费用的专用机队托管,优化您游戏服务器的成本效益。

持久在线,24/7全天候可用,您的工作室专属。

专属物理机集群 (裸金属)

预留容量

$0.0261

/ vCPU

/ 小时

按月计费,始终开启

每个主机每月 $280(12个月标准价),或按月支付每月 $350

通过无出站流量费用的专用机队托管,优化您游戏服务器的成本效益。

持久在线,24/7全天候可用,您的工作室专属。

您的账单因费率和使用量而异;这可能会根据游戏类型、玩家人数等因素而有所不同。

您的账单因费率和使用量而异;这可能会根据游戏类型、玩家人数等因素而有所不同。

使用我们的预估计算器模拟您的用量 ->

使用我们的预估计算器模拟您的用量 ->

Edgegap 的功能与价格:边缘云与私有集群(Private Fleets)详细对比

Edgegap 的功能与价格:边缘云与私有集群(Private Fleets)详细对比

对比

免费试用

边缘云

Private Fleets

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

在帐户中添加信用卡后,即可解锁各项功能。

对比

免费试用

边缘云

Private Fleets

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

在帐户中添加信用卡后,即可解锁各项功能。

对比

免费试用

边缘云

Private Fleets

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

在帐户中添加信用卡后,即可解锁各项功能。