本指南将向您展示如何在 Edgegap 的专用游戏服务器上托管使用 Photon Fusion 2 构建的游戏。服务器以无头模式(headless)在 GameMode.Server 中运行,因此无需玩家来托管比赛。
将游戏服务器容器化后,Edgegap 可根据简单的 API 调用按需将其部署到 615 多个边缘云位置中距离玩家最佳的位置(了解更多),并完全按使用量计费:无需租用、配置整台服务器,也无需在两场比赛之间保持服务器运行。对于需要预留容量的持久服务器,Edgegap 提供了私有舰队(Private Fleets)。
您的 Photon 设置保持不变:玩家仍然通过 Photon Cloud 以及您自己的 App ID 查找并加入比赛。Edgegap 仅负责运行服务器。
Photon 的 Fusion 2 文档将 Edgegap 列为游戏会话托管提供商(Photon 专用服务器页面)。只需订阅 Photon Public Cloud,即可在专用游戏服务器上以服务器模式(Server Mode)运行游戏。
本指南涵盖:
准备 Unity、Photon、您的 Edgegap 帐户以及容器化工具
将您的编码智能体连接到 Edgegap(可选)
让您的 Fusion 游戏做好部署专用服务器的准备
构建并容器化您的游戏服务器
部署测试服务器并连接到该服务器
玩家如何找到服务器
双人测试
您可以通过两种方式进行操作,也可以将它们结合使用:
使用编码智能体。将 Claude Code、Cursor 或其他智能体连接到 Edgegap MCP 服务器及其 agent skills。智能体负责编辑您的项目、构建并容器化服务器并进行部署。您只需在 Unity、Photon 和 Edgegap 控制面板中进行点击操作,并进行游玩测试即可。
手动操作。以下每个步骤在没有智能体的情况下也均可操作。
对于服务器的构建和容器化,Edgegap 的 Unity 自动化游戏服务器构建工具插件是可选的。它可以通过 Unity 编辑器中的按钮来构建服务器、将其容器化并部署到云端,这是首次在云端查看服务器上线的最快方式(步骤 4,选项 A)。
在这里,我们使用 Edgegap 版本的 Photon Asteroids Simple (Host) 示例,该示例已设置为作为专用服务器运行。任何 Fusion 2 项目的操作方式都相同。对于体量更大的游戏,请参阅“后续步骤”中的 BR200 和 Simple FPS 示例。
示例:Unity 6.0 LTS(项目保存版本为 6000.0.41f1),Fusion 2.0.6,服务器运行在 Linux 上,客户端在 Unity 编辑器中运行。Photon 的示例代码仍遵循 Photon 的许可条款。
得到 Mirror Networking 创建者的完全认可
Photon 的 Fusion 2 文档通过这个 Asteroids 示例,将 Edgegap 列为专用服务器的游戏会话托管服务商。
1. 开始之前
一个免费的 Edgegap 账户。验证您的电子邮件。测试无需信用卡。
一个 Photon 账户和您自己的 Fusion 2 App ID。在 Photon 仪表板中,创建一个应用程序(多人游戏、Fusion SDK、Fusion 2)并复制其 App ID。每位开发者都需要拥有自己的 ID。
安装了 Linux 构建模块的 Unity Engine。Edgegap 建议使用 LTS 版本。
从 Unity Hub 添加这些模块:Linux Build Support (Mono)、Linux Build Support (IL2CPP) 以及 Linux Dedicated Server Build Support。添加完成后请重启 Unity。
Asteroids:使用 Unity 6.0 LTS,即示例保存时所用的版本 (6000.0.41f1)。在 Unity Hub 中添加项目时,请安装该版本或更高的 6000.0 补丁版本。较新的 Unity 版本尚未针对该示例进行测试。您自己的 Fusion 项目可以使用任何 LTS 版本:Edgegap 的 Fusion 技能已通过 Unity 6.3 LTS 测试。
运行中的容器化工具。我们建议使用 Docker Desktop,并在构建时保持安装和运行状态。
其他容器工具也可以与 Edgegap 配合使用,但本指南仅涵盖 Docker。
对于代理路径:从仪表板 → 用户设置 → 令牌获取 Edgegap API 令牌。该令牌适用于整个组织,因此请像对待密码一样对待它:切勿将其放入项目、游戏客户端或聊天中。
Git:Unity 需要在 PATH 中配置 Git 客户端(2.14.0 或更高版本)以从 Git URL 安装软件包,例如 Edgegap 插件。macOS 通常已经内置了一个(Xcode 命令行工具);在 Windows 上,请安装 Git。
2. 将您的代码代理连接到 Edgegap
如果您全程手动操作,请跳过此步骤。
Edgegap MCP 服务器允许您的 Agent 创建应用程序和版本、部署服务器并读取您账户上的日志。Agent 技能为其提供了经过测试的 Fusion 工作流(edgegap-fusion 技能)、Dockerfile 以及已知避坑指南。
Claude Code:安装 Edgegap 插件。它会同时添加 MCP 服务器和技能,并在安装期间提示输入您的 API 令牌(存储在系统的凭据存储中):
/plugin marketplace add edgegap/edgegap-agent-skills,然后运行 /plugin install edgegap@edgegap。重启会话。
只需要 MCP 服务器而不需要插件?请在您自己的终端中运行以下命令:claude mcp add --transport http edgegap https://mcp.edgegap.dev/mcp -H "Authorization: token YOUR_EDGEGAP_API_TOKEN" --scope user。请勿两项都操作,否则会产生两个 edgegap 服务器。
Cursor、VS Code 及其他支持发送请求头的客户端:添加 https://mcp.edgegap.dev/mcp 并附带请求头 Authorization: token YOUR_EDGEGAP_API_TOKEN,然后使用 npx skills add edgegap/edgegap-agent-skills --skill "*" 安装技能。
Claude Desktop:自定义连接器无法发送该请求头,因此请改用本地服务器(Node 18+):{ "mcpServers": { "edgegap": { "command": "npx", "args": ["-y", "@edgegap/mcp"] } } }。首次使用时会要求输入令牌。
检查是否正常运行:
“列出我的 Edgegap 应用程序。”
返回空列表是正常的。若出现关于令牌的错误,通常意味着请求头格式变成了 token token ...。
3. 让您的 Fusion 服务器准备好进行专属托管
在 Edgegap 上,没有玩家作为比赛的主机。无头(Headless)Fusion 服务器拥有该游戏:它以 GameMode.Server 模式自行启动,在 Photon Cloud 上注册会话,客户端通过名称加入该会话。服务器和客户端上的三项内容必须匹配,否则客户端会收到“Game Does Not Exist”(游戏不存在)提示:App ID、App Version 以及 Photon 区域。
Asteroids:Edgegap 的版本已做好专用服务器就绪支持。在 Unity Hub 中打开它(Add → Add project from disk),然后:
打开 Tools → Fusion → Realtime Settings,并将您自己的 App ID 粘贴到 App Id Fusion 中。保存项目(File → Save Project)以使更改生效。
检查 Tools → Fusion → Network Project Config:确保 Peer Mode 为 Single。在示例中它已是该设置。
检查 File → Build Profiles(Build Settings):确保
Assets/Asteroids-Host-Simple/Scenes中的两个场景均已启用,且AsteroidsSimple-Menu排在最前面。
该示例添加的内容是 Menu 场景中某个 GameObject 上的一个脚本:Assets/EdgegapHelpers/EdgegapServerManager.cs。在服务器构建版本中,它会读取 Edgegap 的环境变量,以部署名称为会话命名({request_id}.pr.edgegap.net),绑定 0.0.0.0:7777,向 Fusion 提供部署的公共 IP 和外部端口,并启动游戏场景。菜单中的 Start Edgegap 按钮则作为客户端加入该会话。
您自己的 Fusion 游戏,结合您的智能体。该分支是一个有效的参考:您的编码智能体将从已在 Edgegap 上运行过的文件开始,因此它建立在经过测试的配置之上,无需凭空猜测。
“加载 edgegap-fusion 技能,并参考 https://github.com/edgegap/netcode-game-sample-photon-fusion2-asteroid 使该 Photon Fusion 2 项目支持专用服务器:服务器构建在批处理模式下以 GameMode.Server 启动 NetworkRunner,绑定 0.0.0.0 端口 7777,以 Edgegap 部署命名会话,并使用客户端将使用的 Photon 区域。客户端通过名称加入该会话。当比赛结束时,服务器关闭 runner 并退出。然后检查它在包含一台服务器和两个客户端的本地环境中是否仍能正常工作。”
手动操作,在您的项目中:
在批处理模式下以
GameMode.Server以及Address = NetAddress.Any(7777)启动服务器。不要绑定部署的公共 IP:容器并不拥有该 IP,绑定会导致服务器启动失败。以部署名称命名会话:
{ARBITRIUM_REQUEST_ID}.pr.edgegap.net。在 Network Project Config 中保持 Peer Mode 为 Single。
使用 Dedicated Server 平台(Server 子目标)构建服务器,以便它以无头模式运行。
比赛结束时,关闭 runner 并退出应用程序,以便部署停止并停止计费。
启动时切勿打印环境变量:它包含部署的删除令牌(delete token)。
4. 构建并容器化您的服务器
Edgegap 会在容器内运行您的 Linux 服务器构建版本。您可以使用任一选项,或者两者都用。
选项 A(可选):Edgegap 适用于 Unity 的自动化游戏服务器构建工具插件。这是首次进行云端部署的最快方式,只需点击按钮即可完成全部操作。它使用 Docker 对您的服务器进行容器化。Asteroids 示例中已包含该插件。
对于您自己的项目:选择 Window → Package Manager,选择 +,然后选择 Install package from git URL,并粘贴
https://github.com/edgegap/edgegap-unity-plugin.git。打开 Tools → Edgegap Server Hosting。在 1. Connect your Edgegap Account 下,选择 Sign in with Edgegap(或 Get token),粘贴您的令牌,然后选择 Validate token。
在 2. Build Your Game Server 下,选择 Build server。
在 Docker 运行的情况下,在 3. Containerize Your Server 下,选择 Containerize with Docker。或者,在 4. Test Your Server Locally 下,选择 Deploy local container。
在 5. Upload to Edgegap 下,选择 Upload image and Create app version。在浏览器中,将端口设置为 7777,协议为 UDP,名称为
gameport。提交。
该插件的默认 Dockerfile 会在启动时打印容器的环境变量。这对于测试来说没有问题;但在正式上线前,请使用 edgegap-fusion 技能的 Dockerfile 或您自己的 Dockerfile。
选项 B:询问您的代理(Agent)。
“构建 Linux 专用服务器,使用不打印环境变量的 Dockerfile 将其容器化为 linux/amd64 架构,使用新标签推送到我的 Edgegap 容器注册表(Container Registry),然后创建应用和应用版本,端口为 7777 UDP,命名为 gameport。”
代理会要求您自己运行 docker login registry.edgegap.com,并使用来自容器注册表页面的用户名和令牌,从而确保这些凭据不会出现在聊天记录中。请确保应用版本已设置注册表凭据:如果没有这些凭据,部署将失败并提示“Unable to pull image from registry”。
每次构建时都使用新的镜像标签,切勿使用 latest。
5. 部署测试服务器并连接
手动启动一台服务器,以验证镜像、端口以及您的 Photon 设置是否正常工作。以下任一方式均可:
通过插件:在 6. Deploy a Server on Edgegap 下,选择 Deploy to cloud。
通过控制面板:在 Edgegap 控制面板中打开您的应用版本,选择 Deploy,选择一个离您较近的位置并进行部署。
通过您的智能体(agent):“在我附近部署最新的 Edgegap 版本,等待它就绪,向我展示日志,并提供主机 URL。”
当部署状态为 Ready 时,复制其 Host URL({request_id}.pr.edgegap.net)。对于 Fusion,这是会话名称,而不是地址:Photon 会将客户端连接到服务器。
Asteroids:打开 AsteroidsSimple-Menu 场景,点击播放(Play),将主机 URL 粘贴到 Room Name 中,然后选择 Start Edgegap。服务器在就绪(Ready)后可能最多需要一分钟来注册其会话。
如果服务器正在运行,但客户端报告“Game Does Not Exist (32758)”,则说明客户端位于另一个 Photon 区域。打开 Tools → Fusion → Realtime Settings,并将 Fixed Region 设置为离部署位置最近的 Photon 区域(例如纽瓦克为 us,蒙特利尔或多伦多为 cae,阿姆斯特丹为 eu;参见 Photon 的区域列表)。保存项目,然后重试。
完成后停止部署:在插件中选择 Stop last deployment、在控制面板中的部署页面操作,或要求您的智能体执行。Asteroids 服务器在比赛结束时不会自动停止,且免费套餐一次只能运行一个部署。
6. 玩家如何找到服务器
使用 Fusion 时,匹配仍在 Photon Cloud 上进行。每个 Edgegap 部署都是一个 Fusion 服务器和一个以该部署命名的会话。具有相同 App ID、App Version 和区域的客户端通过该名称加入。
因此,您的游戏需要某种机制来为比赛启动部署并将该会话名称提供给玩家:
用于测试:从控制面板复制主机 URL(Host URL),如步骤 5 所示。
用于线上游戏:您的后端调用 Edgegap API 在玩家附近进行部署,然后将该会话名称发送到玩家的客户端。Edgegap 的匹配器(matchmaker)也可以做到这一点:其匹配分配会返回部署的主机名(host name),即会话名称。Edgegap 的匹配器尚未与 Fusion 一起进行过测试。
7. 双人测试
确保没有其他测试部署仍在运行,然后部署一台服务器(步骤 5)。
运行两个客户端。Asteroids 示例包含 ParrelSync:选择 ParrelSync → Clones Manager,Create new clone,然后选择 Open in New Editor。Unity 的 Multiplayer Play Mode 也同样适用。
在两者中的 Room Name 中输入相同的主机 URL,然后选择 Start Edgegap。两艘飞船将出现在同一场比赛中。
进行游戏直到只剩下一名玩家。两个客户端都将返回到菜单。
停止部署(插件中的 Stop last deployment,或询问您的代理)。在您自己的游戏中,改为让服务器在比赛结束时退出,这样您只需在玩家游玩时付费。
在免费层级中,部署会在 60 分钟后停止,且一次只能运行一个部署。
更多示例:有关 BR200 和 Simple FPS 示例,请参阅 Edgegap 上的 BR200 和 Edgegap 上的 Simple FPS。
正在使用其他 Unity 网络代码?请参阅 Unity Engine。
准备上线?让您的 Agent 运行 edgegap-launch 技能的检查清单:版本推出、重启策略、最长持续时间、成本控制。
遇到困难?让您的 Agent 加载 edgegap-troubleshoot,或在 Edgegap Discord 上向我们的团队和其他工作室咨询。
常见问题
关于在 Edgegap 专属服务器上托管 Photon Fusion 2 游戏的常见问题。
Photon Fusion 2 支持专用服务器吗?
是的。从无界面的 Linux 构建中以 GameMode.Server 启动 NetworkRunner。服务器拥有状态权威(state authority),并且没有玩家。Photon 的 Fusion 2 文档将 Edgegap 列为游戏会话托管服务商。
在 Edgegap 上使用专属服务器时,我还需要 Photon Cloud 吗?
是的。服务器在 Photon Cloud 注册其会话,客户端通过名称加入该会话,因此两者都需要相同的 App ID、App Version 和地区。Photon 表示,Public Cloud 订阅对于服务器模式(Server Mode)来说已经足够了。
Fusion 服务器在 Edgegap 上使用哪个端口?
该示例通过 UDP 绑定 7777。在您的 Edgegap 应用程序版本上设置相同的端口,命名为 gameport。绑定 0.0.0.0,切勿绑定部署的公共 IP。
为什么在服务器正在运行的情况下,客户端仍会收到“游戏不存在”的提示?
客户端和服务器使用了不同的 Photon 区域、App ID 或 App Version。请将客户端的 Fixed Region 设置为距离部署位置最近的 Photon 区域,并检查两者是否使用了相同的 App ID 和 App Version。
托管一个 Fusion 游戏服务器需要多少钱?
在 Edgegap 上进行测试是免费的,无需信用卡。此后,Edge Cloud 仅在服务器运行时按每 vCPU 每分钟计费,因此在每场比赛结束时退出的服务器在比赛间歇期不会产生任何费用。Photon 的套餐则单独计费。

客户
了解更多已接入 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 自动化游戏服务器编排如何带来无缝的多人游戏体验。









