了解Edgegap的工作原理

了解Edgegap的工作原理

Photon Fusion 2

Simple FPS

部署至 Edgegap

已发布

已发布

已发布

最近一次准确性审核

最近一次准确性审核

最近一次准确性审核

Simple FPS:在 Edgegap 专属服务器上运行 Photon 的 Simple FPS

Simple FPS:在 Edgegap 专属服务器上运行 Photon 的 Simple FPS

Simple FPS 是 Photon 针对 Fusion 2 的死亡竞赛射击游戏示例。在默认情况下,比赛由一名玩家主持。而 Edgegap 的套件则会在其专用的专属游戏服务器上运行每场比赛,无需对 Simple FPS 或 Fusion 文件进行任何修改。

Photon Cloud 继续发挥其原有作用:玩家仍然通过 Photon 寻找游戏,并且仍从示例自带的“组队”(Party)菜单中加入。唯一的区别在于他们输入的内容:服务器地址及其 Photon 区域。

没有玩家主持比赛:无头(headless)Fusion 服务器运行游戏,每个玩家直接连接到该服务器。

Edgegap 的网络覆盖 615 多个边缘云节点(了解更多)。每个服务器都会部署到最适合其玩家的可用位置,并且仅在其运行期间计费。

平台:Linux 专属服务器 (IL2CPP);客户端已在 Windows 上测试。Unity 6000.3、Fusion 2.1.1、Simple FPS 2.1.1。该套件采用 MIT 许可。Simple FPS 和 Fusion 来自 Unity Asset Store,遵循各自的许可,未包含在代码库中。

工作原理

  1. 您在 Edgegap 上部署服务器。它作为 Fusion 服务器在 UDP 端口 7777 上启动,并加载 Deathmatch 场景。

  2. 它以部署地址(例如 f68e011bfb01.pr.edgegap.net)命名其 Photon 会话,并将其注册到距离运行地延迟(ping)最低的 Photon 区域。

  3. 服务器记录日志 server started: session=<address> photon_region=<code>。

  4. 玩家打开组队菜单(Party Menu),在“加入”(Join)卡片上输入地址和区域,然后点击加入(Join)。Photon Cloud 找到该会话;接着客户端直接连接到 Edgegap 服务器。

  5. 如果服务器进程自行退出,启动脚本将停止部署,从而停止计费。

该套件添加的内容:

路径

作用

Assets/EdgegapSimpleFPS/EdgegapFusionBootstrap.cs

替换 Deathmatch 上的 FusionBootstrap。在服务器构建中,在端口 7777 上启动 Fusion 服务器,以部署命名会话,并在加载时将场景标记为激活。

Assets/EdgegapSimpleFPS/EdgegapPartyMenu.cs

替换 Startup 上的 FusionMenuUIParty。Join 接收部署地址和 Photon 区域代码。Create Game 保持不变。

Assets/EdgegapSimpleFPS/EdgegapServerSceneLoader.cs

仅限服务器构建:跳过 Startup 菜单并加载 Deathmatch。

Assets/EdgegapSimpleFPS/Editor/SimpleFpsEdgegapSetup.cs

Tools > Edgegap Simple FPS:检查、设置、构建 Linux 服务器和 Windows 客户端。

edgegap/Dockerfile, edgegap/start-server.sh

Ubuntu 22.04 镜像,非 root 用户。从不输出环境变量;在服务器退出时停止部署。

scripts/

设置、构建、打包并推送、本地运行、使用两个无头客户端进行测试。

Photon Fusion 2

x

Edgegap

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

已在 Photon Fusion 2 文档中列出

已在 Photon Fusion 2 文档中列出

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

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

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

Two armed players among stacked shipping containers in Photon Fusion 2's Simple FPS sample, with the Unity and Photon logos.

Photon 的 Simple FPS,每场比赛都在各自独立的 Edgegap 专用服务器上运行。

分步指南

运行示例

1. 开始之前

  • 一个免费的 Edgegap 账户。

  • 来自 Unity Asset Store 的 Simple FPS Multiplayer (Photon Fusion),已导入至新的 Unity 项目中。它带有自己的 Project Settings。

  • 带有 Linux Dedicated Server Build Support 和 Linux Build Support (IL2CPP) 的 Unity 6000.3。对于客户端,则需要 Windows Build Support (IL2CPP),这需要 Visual Studio 的 C++ 工作负载。

  • 若要在 Windows 上构建 Linux IL2CPP 服务器,请在 Window > Package Manager > + > Add package by name 中添加 com.unity.toolchain.win-x86_64-linux 和 com.unity.sdk.linux-x86_64。

  • 来自 Photon 仪表板的您自己的 Photon Fusion App ID。每位开发者都需要拥有自己的 ID。

  • Docker Desktop。

  • 克隆该工具包。

Git:Unity 需要在您的 PATH 中配置 Git 客户端(2.14.0 或更高版本),以便从 Git URL 安装软件包(例如 Edgegap 插件)。macOS 通常已经内置了一个(Xcode Command Line Tools);在 Windows 上,请安装 Git。

2. 将该工具包添加到 Simple FPS

将 Assets/EdgegapSimpleFPS、edgegap/、scripts/、.dockerignore 和 .gitattributes 复制到您的 Simple FPS 项目中,与 Assets/ 同级。然后在 Unity 中:

  1. 在 Tools > Fusion > Realtime Settings 中,粘贴您的 Fusion App ID。Asset Store 资源包还在 Assets/AssetStoreTools/Resources/ 中附带了一个带有发布者 App ID 的 PhotonAppSettings 资源:也将您的 App ID 填入该处,或者删除该副本。

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

  3. 运行 Tools > Edgegap Simple FPS > Check Project 并修复其报告的所有问题。

  4. 运行 Tools > Edgegap Simple FPS > Set Up Project。

Set Up Project 会交换这两个组件(保留它们的设置),在 Party 菜单的 Join 卡片中添加一个 Region 字段,并将构建配置文件设置为 Startup (0),然后是 Deathmatch (1)。它仅更改场景和构建设置,您可以放心再次运行它。

3. 构建服务器并推送镜像

在编辑器关闭该项目的情况下,从终端(Windows 上的 Git Bash)运行:

scripts/build.sh server

第一次 IL2CPP 服务器构建大约需要 13 分钟。使用 Container Registry 页面上的凭据,通过 docker login registry.edgegap.com 登录,然后针对每次构建使用新标签进行打包并推送:

scripts/package.sh registry.edgegap.com/<project>/simplefps <new-tag>

若要先在您的计算机上进行测试,请运行 scripts/package.sh,然后运行 scripts/run-local.sh。在本地,由于 Docker Desktop 的网络设置,连接显示为中继(Relayed);在 Edgegap 上则是直连(Direct)。

如果您改为使用 Edgegap Unity 插件进行构建,请将其 Path To Dockerfile 设置为 edgegap/Dockerfile。该插件的默认 Dockerfile 会打印环境变量,其中包括部署的删除令牌(delete token)。

4. 部署并加入比赛

在控制面板中,创建一个应用程序和一个版本:

  • 您的镜像和标签,以及您的注册表用户名和令牌;

  • 起始配置为 1 vCPU 和 2 GB;

  • 一个端口:7777,UDP,并关闭端口检查。

将该版本部署在靠近玩家的区域。在部署的日志中,找到:

[edgegap-simplefps] server started: session=<fqdn> photon_region=<code>

使用 scripts/build.sh client 构建客户端(或使用您常用的 Windows 构建方式)。启动它,点击 Party Menu,在代码字段中输入部署地址(例如 f68e011bfb01.pr.edgegap.net),在 Region 字段中输入区域代码(例如 us),然后点击 Join。第二个玩家执行相同的操作,两人即可进入同一服务器上的 Deathmatch 模式。

如果客户端无法连接,极有可能是因为区域与服务器日志中的区域不一致。

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

该工具包是一个可运行的参考:您的编码智能体将从已在 Edgegap 上运行的文件开始,因此它建立在经过测试的配置之上,而不是凭空猜测。以下是它所做的更改,以及每项更改的用途:

  1. 服务器自行启动。在服务器构建版本(UNITY_SERVER)中,Assets/EdgegapSimpleFPS/EdgegapFusionBootstrap.cs 将 Runner 以 GameMode.Server 启动在 ARBITRIUM_PORT_GAMEPORT_INTERNAL (7777) 上,并绑定到 0.0.0.0,以便客户端进行 Direct(直连)连接。

  2. 会话以部署命名。会话名称为 <ARBITRIUM_REQUEST_ID>.pr.edgegap.net,即部署的地址,以便玩家和工具知道要加入什么。如果设置了 PHOTON_REGION,则会固定该区域。

  3. 客户端加载正确的场景。Fusion 通过构建索引告知客户端场景,因此服务器使用客户端的场景列表(Startup 0,Deathmatch 1)进行构建,并且 Assets/EdgegapSimpleFPS/EdgegapServerSceneLoader.cs 会在服务器上跳过 Startup。服务器还使用 activeOnLoad: true 注册 Deathmatch。如果没有这两项修复,客户端可以加入,但会在每个 tick 的 Player.FixedUpdateNetwork 中抛出 NullReferenceException。

  4. 玩家按地址和区域加入。Assets/EdgegapSimpleFPS/EdgegapPartyMenu.cs 保留键入的地址作为会话名称(会话名称区分大小写),并将区域传递给 Fusion。

  5. 容器是安全的并会自行停止。edgegap/Dockerfile 以非 root 用户身份运行服务器;edgegap/start-server.sh 绝不会输出环境变量,并在服务器退出时停止部署。

与您的智能体配合使用:

“加载 edgegap skill,然后加载 edgegap-fusion(对于 Simple FPS 本身,加载 edgegap-fusion-simplefps)。以 github.com/edgegap/netcode-game-sample-photon-fusion2-simple-fps 作为参考,使我的 Fusion 游戏在 Edgegap 游戏端口上的 Linux IL2CPP 服务器构建中以 GameMode.Server 启动,以部署 FQDN 命名会话,保持服务器的场景列表和活动场景与客户端相同,允许玩家按会话名称和 Photon 区域加入,并添加一个绝不输出环境变量的 Dockerfile。”

有关每个步骤的手动详细说明,请参阅 Photon Fusion 2 集成指南。

6. 玩家如何找到服务器

该示例不使用 Edgegap 的匹配器。匹配保留在 Photon Cloud 上:客户端通过会话名称、App ID、App Version 和 Photon 区域找到服务器,然后直接连接到 Edgegap 服务器。

  • 会话名称:部署的地址,来自部署日志或仪表板的 <request id>.pr.edgegap.net。

  • App ID 和 App Version:服务器和客户端必须使用相同的 ID 和版本进行构建。

  • 区域:服务器在其运行位置 Ping 值最佳的区域注册(多伦多部署选择了 cae,纽瓦克部署选择了 us)。客户端必须输入相同的代码,否则 Photon 无法找到该会话。

在此示例中,玩家手动在“组队(Party)”菜单中输入地址和区域。在正式发布的游戏中,您自己的后端或大厅将启动部署并将这两个值传递给玩家。Photon Fusion 2 集成指南涵盖了该设置。

已知限制

  • 玩家需要手动输入地址和区域。Party 菜单是一种便于测试的加入方式,而非完整的匹配流程。

  • 区域必须一致。如果服务器选择的 Photon 区域与客户端输入的区域不匹配,则加入失败。PHOTON_REGION 覆盖项已编写但未经验证。

  • 结束比赛未经测试。启动脚本会在服务器自行退出时停止部署,但未验证 Simple FPS 的服务器在比赛结束后是否会退出。请在应用版本上设置最长时间。

  • 服务器规格仅供参考。测试使用了 1 vCPU / 2 GB;尚未测算完整比赛所需的 CPU 资源。

  • 受许可保护的文件请勿存入 git。切勿将 Simple FPS、Fusion 或示例的第三方资源提交到共享或公共代码仓库中。

测试了什么

于 2026 年 10 月 20 日在 Windows 11 上使用 Simple FPS 2.1.1、Fusion 2.1.1(版本 2177)和 Unity 6000.3.11f1 在 Edgegap 上进行了端到端测试:

  • Linux IL2CPP 服务器和 Windows IL2CPP 客户端,基于未修改的 Simple FPS 项目通过工具包构建。

  • 包含两个客户端的本地容器:均已加入,中继(本地符合预期),无异常。

  • 位于纽瓦克(Photon 区域 us)的 Edgegap 部署,有两个通过“组队(Party)”菜单加入的客户端:连接直连(Direct),11 至 29 毫秒,两名玩家,已加载死斗模式(Deathmatch),客户端或服务器均无异常。此前在多伦多(cae)使用相同手动修改进行的一次运行:直连,11 至 24 毫秒。

若要运行相同的检查,请将 Assets/EdgegapSimpleFPSTest 也复制到项目中,然后:

scripts/build.sh client

scripts/test-clients.sh <fqdn> <region>

两个无头客户端通过“组队”菜单加入;当每个客户端都能看到所有玩家且未记录任何异常时,脚本以 0 退出。发布前请删除 Assets/EdgegapSimpleFPSTest。

未测试项:PHOTON_REGION 覆盖、超过两名玩家、完整进行至结束的比赛、比赛后服务器是否退出、CPU 规格配置、macOS 以及 Edgegap 插件的构建按钮。

常见问题

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

Photon Fusion 2 可以在专用服务器上运行吗?

是的。无头(headless)Unity 构建版本会将运行器启动为 GameMode.Server,向 Photon Cloud 注册其会话,然后客户端直接连接到该会话。Photon 的 Fusion 2 文档将 Edgegap 列为游戏会话托管提供商。

我需要修改 Simple FPS 的代码吗?

不。该工具包子类化了 FusionBootstrap 和 FusionMenuUIParty,并通过一个菜单命令在场景中对它们进行了替换。没有对任何 Simple FPS 或 Fusion 文件进行编辑,因此示例升级保持纯净。

在 Simple FPS 中,玩家如何加入 Edgegap 服务器?

从示例的 Party(组队)菜单中:在 code(代码)字段中输入部署地址,在 Region(区域)字段中输入 Photon 区域,然后按 Join(加入)。这两个值都在服务器的日志中。

为什么客户端会在 Player.FixedUpdateNetwork 中抛出 NullReferenceException?

通常服务器在构建时仅包含了 Deathmatch 场景,或者该场景在加载时未激活。Fusion 是通过构建索引(build index)来发送场景的,因此请像该工具包一样,将 Startup 和 Deathmatch 一起构建到服务器中。

客户

了解更多已接入 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 行

解锁

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