Simple FPS 是 Photon 针对 Fusion 2 的死亡竞赛射击游戏示例。在默认情况下,比赛由一名玩家主持。而 Edgegap 的套件则会在其专用的专属游戏服务器上运行每场比赛,无需对 Simple FPS 或 Fusion 文件进行任何修改。
Photon Cloud 继续发挥其原有作用:玩家仍然通过 Photon 寻找游戏,并且仍从示例自带的“组队”(Party)菜单中加入。唯一的区别在于他们输入的内容:服务器地址及其 Photon 区域。
没有玩家主持比赛:无头(headless)Fusion 服务器运行游戏,每个玩家直接连接到该服务器。
Edgegap 的网络覆盖 615 多个边缘云节点(了解更多)。每个服务器都会部署到最适合其玩家的可用位置,并且仅在其运行期间计费。
完整指南:借助 Photon Fusion 2 integration guide 将 Edgegap 添加到您自己的 Fusion 游戏中
平台:Linux 专属服务器 (IL2CPP);客户端已在 Windows 上测试。Unity 6000.3、Fusion 2.1.1、Simple FPS 2.1.1。该套件采用 MIT 许可。Simple FPS 和 Fusion 来自 Unity Asset Store,遵循各自的许可,未包含在代码库中。
工作原理
您在 Edgegap 上部署服务器。它作为 Fusion 服务器在 UDP 端口 7777 上启动,并加载 Deathmatch 场景。
它以部署地址(例如
f68e011bfb01.pr.edgegap.net)命名其 Photon 会话,并将其注册到距离运行地延迟(ping)最低的 Photon 区域。服务器记录日志
server started: session=<address> photon_region=<code>。玩家打开组队菜单(Party Menu),在“加入”(Join)卡片上输入地址和区域,然后点击加入(Join)。Photon Cloud 找到该会话;接着客户端直接连接到 Edgegap 服务器。
如果服务器进程自行退出,启动脚本将停止部署,从而停止计费。
该套件添加的内容:
路径 | 作用 |
|---|---|
| 替换 Deathmatch 上的 |
| 替换 Startup 上的 |
| 仅限服务器构建:跳过 Startup 菜单并加载 Deathmatch。 |
| Tools > Edgegap Simple FPS:检查、设置、构建 Linux 服务器和 Windows 客户端。 |
| Ubuntu 22.04 镜像,非 root 用户。从不输出环境变量;在服务器退出时停止部署。 |
| 设置、构建、打包并推送、本地运行、使用两个无头客户端进行测试。 |
得到 Mirror Networking 创建者的完全认可
Photon 的 Fusion 2 文档将 Edgegap 列为专用服务器的游戏会话托管服务商。

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。
克隆该工具包。
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 中:
在 Tools > Fusion > Realtime Settings 中,粘贴您的 Fusion App ID。Asset Store 资源包还在
Assets/AssetStoreTools/Resources/中附带了一个带有发布者 App ID 的PhotonAppSettings资源:也将您的 App ID 填入该处,或者删除该副本。在 Tools > Fusion > Network Project Config 中,将 Peer Mode 设置为
Single。运行 Tools > Edgegap Simple FPS > Check Project 并修复其报告的所有问题。
运行 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 上运行的文件开始,因此它建立在经过测试的配置之上,而不是凭空猜测。以下是它所做的更改,以及每项更改的用途:
服务器自行启动。在服务器构建版本(
UNITY_SERVER)中,Assets/EdgegapSimpleFPS/EdgegapFusionBootstrap.cs将 Runner 以GameMode.Server启动在ARBITRIUM_PORT_GAMEPORT_INTERNAL(7777) 上,并绑定到0.0.0.0,以便客户端进行 Direct(直连)连接。会话以部署命名。会话名称为
<ARBITRIUM_REQUEST_ID>.pr.edgegap.net,即部署的地址,以便玩家和工具知道要加入什么。如果设置了PHOTON_REGION,则会固定该区域。客户端加载正确的场景。Fusion 通过构建索引告知客户端场景,因此服务器使用客户端的场景列表(Startup 0,Deathmatch 1)进行构建,并且
Assets/EdgegapSimpleFPS/EdgegapServerSceneLoader.cs会在服务器上跳过 Startup。服务器还使用activeOnLoad: true注册 Deathmatch。如果没有这两项修复,客户端可以加入,但会在每个 tick 的Player.FixedUpdateNetwork中抛出NullReferenceException。玩家按地址和区域加入。
Assets/EdgegapSimpleFPS/EdgegapPartyMenu.cs保留键入的地址作为会话名称(会话名称区分大小写),并将区域传递给 Fusion。容器是安全的并会自行停止。
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 的工作室案例研究。

《以太之战 2》完美的全球发布
Aether Studios
了解Aether Studios是如何快速添加Edgegap并向他们的社区交付完美的启动和后启动服务的。
Case Study

克服因虚拟现实在竞技Multiplay中使用WiFi而引入的延迟
Halfbrick Studios
Discover how Halfbrick successfully launched & maintains a multiplayer-focused Early Access on META Quest's VR platform.
Case Study

MENA的社交应用添加了在线游戏
WOLF
了解这款在中东和北非地区广受欢迎的社交应用如何轻松地将 matchmaking 和多人游戏编排添加到 WOLF Qanawat。
Case Study

混合编排让开球策略随时应对任何流量做好准备
Birch Games
混合编排如何帮助 Birch Games 应对流量——将免流出费用的 Fleets 与无区域限制云相结合。
Case Study

7天血月
The Fun Pimps & iLLOGIKA
了解 Illogika 如何大幅降低服务器成本,并确保提供《七日杀 (7 Days to Die)》玩家所期望的在线体验。
Case Study

真实的在线战争需要终极的协调
Highwire Games
了解Highwire对性能的需求如何需要只有Edgegap才能提供的编排。
Case Study

22,000 条评价、4.8 颗星以及自动扩展的基础架构
Sinn Studios
一个由 Slack 提供支持的简单集成,如何让 Sinn Studio 的热门 VR 游戏快速上线并保持稳定运行。
Case Study

动态服务器编排
Under NDA - AAA Studio
了解世界上最大的AAA工作室之一如何通过边缘计算改善其对等多人游戏体验。
Case Study

对于 AAA 格斗游戏的近零延迟
AAA Studio - Under NDA
一个未宣布的项目如何实现了最低延迟,并改善了其1v1游戏中的公平性。
Case Study

Play Gods with Multiplayer Physics
Squido Studio
Learn how Squido uses Edgegap's highligh optimized game servers to deliver mind-bending & chaotic VR gameplay.
Case Study

全面托管的解决方案为独立游戏节省时间 多人VR恐怖游戏
Dirty Pearl Studios
了解Dirty Pearl Studios如何通过Edgegap的轻松集成和自动编排,以及其Nakama集成,节省了开发时间。
Case Study

即时全球服务器部署以促进协作式XR医学教育
AlensiaXR
AlensiaXR如何利用Edgegap为全球医学生提供低延迟、始终可用的共享解剖课程。
Case Study

守光人:具有专用服务器的 VR 社交合作游戏
Spectral Games
Spectral Games 如何在无需任何服务器经验的情况下,利用 Edgegap Matchmaking 和 Server Browser 为其 VR 社交大厅启动专用服务器。
Case Study

全球范围内快速可靠的部署,适用于PvPvE挑战者Gravebound
Crater Studios
Edgegap 的调度和配对如何帮助 Crater Studios 使他们能够将重心从基础设施转移到游戏玩法上。
Case Study

快速扩展网络元宇宙
Hiber
了解Hiber如何通过Edgegap消除服务器容量规划中的猜测。
Case Study

高硬件要求和自定义游戏服务器池
Alderon Games
了解Alderon Games如何瞬间利用全球多个供应商的自定义游戏服务器池来支持其热门MMO。
Case Study

独立开发者的简单集成
WhaleFood Games
阅读关于WhaleFood Games如何使用Edgegap解决其网络代码问题的文章。
Case Study

推动东南亚首款电子竞技游戏的尖端技术。
Anantarupa Studios
了解Edgegap如何通过一个无缝解决方案简化复杂基础设施和尖端技术,从而改变东南亚的游戏格局。
Case Study

一次打击。全球抵达。
Triple Hill Interactive
Triple Hill Interactive如何利用Edgegap的编排来提供低延迟,并提高在每毫秒都至关重要的游戏类型中的公平性。
Case Study

快节奏团队大逃杀...带着枪的动物毛绒玩具!
SANDYFLOOR
了解一家韩国独立工作室是如何将其多人游戏发布到全球的。
Case Study

移动端赛马游戏凭借即时、高效能的服务器走向全球
Mirai Labs
看 Mirai Labs 如何通过即时服务器部署和细分 vCPU 来运行 Pegaxy Blaze 的全球多人竞速游戏,从而将单个玩家的成本保持在极低水平。
Case Study

服务器管理与分发
Matrioshka Games
阅读关于Matrioshka Games如何在资源有限的情况下发布早期访问的战斗 Royale。
Case Study

听我的信号,释放地狱!
TyGames
探索独立工作室TyGames如何让玩家沉浸在第三人称角斗士战斗的多人游戏中。
Case Study

瞬时全球编排
Soliton Interactive
探索Soliton Interactive如何做到了不可能……首次推出可多人玩的版本!
Case Study

竞技游戏具有服务器端物理引擎,确保理想的低于50毫秒的延迟
NS7
了解为什么仅有Edgegap能够使独立工作室通过服务器端物理和权限实现其AAA质量的免费游戏体育玩法愿景。
Case Study

iGaming的区域部署
X1 Contra 1
X1 Contra 1 通过经济高效的托管和区域部署,为其巴西玩家提供实时 PvP 休闲游戏,确保数据和法律合规。
Case Study

仅在玩家游玩时付费:经济实惠的多人游戏基础设施
Meltdown Interactive
Edgegap 如何帮助独立开发商 Meltdown Interactive Media 在无需复杂方案的情况下,以高性价比解决扩缩容和匹配问题,从而让他们能够专注于游戏开发。
Case Study

同一个 Edgegap 平台,三种截然不同的网络配置
Warped Games
了解 Warped Games 如何在同一个 Edgegap 部署 API 和同一个容器管线上运行社交中心、实时合作以及回合制合作。
Case Study

台球大师巡回赛Max
RETA Games
Case Study

韩国的Web3 POP提取射击游戏走向全球,即刻启程
NDUS Entertainment
XOCIETY 如何轻松地添加 Edgegap 编排并集成自定义 matchmaking,与 Edgegap Ping Beacons 一起优化延迟。
Case Study

Multiplayer in Every Dimension
Arcadia.tv
Discover how Arcadia.tv uses Edgegap's edge network to deliver an innovative, team and location-based athletic VR sport.
Case Study

F2P 移动格斗游戏利用即时(Just-In-Time)服务器降低基础设施成本
Game Changers Worldwide
Game Changer Worldwide 如何在全球移动端托管 Rumble Rush 的实时 3v3 PvP 游戏。
Case Study
他们选择 Edgegap 的关键原因
了解 Edgegap 自动化游戏服务器编排如何带来无缝的多人游戏体验。









