SpaceEdge 是一款小型 Unity 太空射击游戏,端到端展示了 PlayFab 匹配与 Edgegap 的协同工作:PlayFab 负责玩家登录和匹配,每场对局都会获得其专用的 Edgegap 专属游戏服务器。
PlayFab 继续发挥其原有作用:账户、登录和匹配队列。当找到对局时,Azure Function 会在匹配玩家附近启动 Edgegap 服务器,随后第二个 Function 会告知每位玩家应连接到何处。
游戏中不包含机密信息:客户端仅持有您的 PlayFab title ID,游戏服务器不持有任何 PlayFab 或 Edgegap 凭据,且仅允许匹配成功的玩家加入。玩家离开后,服务器会自动停止运行。
Edgegap 的网络覆盖 615+ 个边缘云节点(了解更多)。每台服务器都会部署到最适合其玩家的可用位置,并且仅在对局进行期间计费。
完整指南:参考 PlayFab 集成指南将 Edgegap 添加到您自己的 PlayFab 游戏中
支持平台:Windows 桌面客户端(已测试)。使用 Edgegap Unity 插件构建的 Linux 专用服务器。客户端代码可以在 WebGL 中运行,但尚未对 WebGL 进行测试。
工作原理
玩家登录 PlayFab 并点击开始游戏 (Start Game):客户端在 PlayFab 队列中创建匹配票证。
PlayFab 匹配两名玩家并触发
playfab.matchmaking.match_found事件。该事件上的规则会运行 Azure FunctionStartEdgegapDeployment。该函数查找每位玩家的位置,并请求 Edgegap 在他们附近进行部署,并使用比赛 ID 开头进行标记。返回大约需要一秒钟。
当服务器启动后,Edgegap 会调用第二个函数
EdgegapDeploymentReady。它通过 Edgegap API 检查部署情况,然后将服务器的主机、端口以及加入令牌写入每位玩家的只读 PlayFab 数据中。两端客户端读取该地址,使用其加入令牌通过 UDP 连接并开始游戏。服务器会拒绝其他任何人。当他们离开后,服务器会自行停止部署。
代码库包含内容:
路径 | 功能描述 |
|---|---|
| 两个 Azure Functions(Node.js 22,无需 PlayFab 或 Edgegap SDK)。 |
| 客户端:登录、票证、等待匹配、等待服务器、连接。仅使用 |
| 服务端:在服务器构建版本中启动游戏服务器,并在比赛结束时停止 Edgegap 部署。运行时自行添加,无需场景配置。 |
| 命令行构建:Edgegap 插件的服务器构建版本和 Windows 测试客户端。 |
| 仅允许匹配成功的玩家加入:检查每个客户端发送的加入令牌。 |
1. 开始之前
一个免费的 Edgegap 账户以及从仪表板 → 用户设置 → 令牌获取的 API 令牌。它适用于整个组织,因此只需配置到 Function App 的设置中,绝不可放入游戏中。
Unity 2021.3 LTS(已在 2021.3.45f2 上测试),需包含 Linux Build Support 和 Linux Dedicated Server Build Support。
一个 PlayFab Title。
一个 Azure 订阅和 Azure CLI。
克隆示例。
2. 将游戏服务器部署在 Edgegap 上
在 Unity 中打开 SpaceEdge_project,然后依次点击 Tools → Edgegap Server Hosting,并使用 Edgegap 登录。
点击 Build server,然后点击 Containerize with Docker:镜像名称为 playfab-fishnet,镜像标签留空(插件将使用当前 UTC 时间)。
点击 Upload to Edgegap:应用程序为 playfab-fishnet,然后点击 Upload image and Create app version。插件将推送镜像并打开版本表单:
若不使用编辑器,相同的服务器构建也可以从命令行运行:
"<Unity>" -batchmode -projectPath SpaceEdge_project -executeMethod EdgegapPluginBuild.BuildServer -logFile build-server.log
对于后续的构建,Rebuild from Source 可以一键完成构建、容器化和推送。
在版本表单中:
保留插件建议的镜像和版本名称(即镜像标签)。Azure Functions 需要该名称。如果表单要求提供注册表凭据,请使用容器注册表页面中的用户名和令牌。
一个端口:名称为
gameport,端口号 7770,UDP。函数将按该名称查找端口。0.5 vCPU 和 1 GB。
最长持续时间为 60 分钟。服务器也会自行停止。
该版本不需要环境变量和机密信息:函数会将比赛详情和加入令牌传递给每个部署。
3. 设置您的 PlayFab Title
匹配队列 (Multiplayer → 匹配 → New queue):名称为
edgegap-fishnet,匹配大小 2-2,Enable server allocation 关闭,因为服务器由 Edgegap 托管。匹配任意两名玩家无需规则。Let clients create players(齿轮图标 → Title settings → API Features):取消勾选 Disable player creation using Client/LoginWithCustomId。新 Title 默认已勾选此项,登录将失败并提示
PlayerCreationDisabled。记下您的 Title ID,并为 Azure Functions 创建一个 Secret Key(Title settings → Secret Keys)。
4. 部署 Azure Functions
在 Node.js 22 上创建一个资源组、一个存储帐户和一个弹性消耗型(Flex Consumption)函数应用。PlayFab 建议选择美国西部区域:
az group create -n rg-edgegap-playfab -l westus2
az storage account create -n <storageaccount> -g rg-edgegap-playfab -l westus2 --sku Standard_LRS
az functionapp create -g rg-edgegap-playfab -n <function-app> --storage-account <storageaccount> --flexconsumption-location westus2 --runtime node --runtime-version 22
在 azure-functions 目录下运行 npm ci --omit=dev,将 host.json、package.json、src/ 和 node_modules/ 打包压缩为 bridge.zip,然后进行部署:
az functionapp deployment source config-zip -g rg-edgegap-playfab -n <function-app> --src bridge.zip
添加应用设置(函数应用 → 设置 → 环境变量):
PLAYFAB_TITLE_ID和PLAYFAB_SECRET_KEY:来自步骤 3。EDGEGAP_API_TOKEN:您的 Edgegap 令牌,不包含token前缀。EDGEGAP_APP_NAME/EDGEGAP_APP_VERSION:playfab-fishnet/ 步骤 2 中的版本名称。EDGEGAP_PORT_NAME为可选项,默认值为gameport。EDGEGAP_READY_WEBHOOK_URL:https://<function-app>.azurewebsites.net/api/EdgegapDeploymentReady?code=<function key>。可选:
EDGEGAP_QUEUES用于仅向某些队列提供 Edgegap 服务器,以及针对 PlayFab 无法定位的玩家配置FALLBACK_LATITUDE/FALLBACK_LONGITUDE。
使用 az functionapp function keys list -g rg-edgegap-playfab -n <function-app> --function-name <name> 获取每个函数的密钥。函数密钥属于敏感机密信息:请勿提交或分享包含这些密钥的 URL。
然后,在 PlayFab 中:
Automation → CloudScript → Functions → Register Function:命名为
StartEdgegapDeployment,并填入其 URL 和函数密钥。Automation → Rules → New Rule:事件类型为
playfab.matchmaking.match_found,操作选择 Execute Azure Function → StartEdgegapDeployment。
不要注册 EdgegapDeploymentReady:该函数由 Edgegap 调用,而非 PlayFab。
5. 进行一场比赛
打开
SpaceEdge_project以及场景Assets/SpaceEdge/Scenes/MainMenu。在
PlayfabRestApiService对象(组件PlayFabMatchmakingClient)上,设置 Title Id。Queue Name 已设置为edgegap-fishnet。确保没有其他部署正在运行:免费层一次只能运行一个。
您需要两名玩家。构建一个 Windows 客户端(Mono,因此不需要 Windows IL2CPP 模块)并运行两次,每次使用各自的 PlayFab 玩家:
"<Unity>" -batchmode -projectPath SpaceEdge_project -executeMethod EdgegapPluginBuild.BuildClient -logFile build-client.log
SpaceEdge_project/Builds/Client/win64/Game.exe -playfabCustomId player-a
SpaceEdge_project/Builds/Client/win64/Game.exe -playfabCustomId player-b
在两个客户端中均点击 Start Game。一旦 PlayFab 将它们匹配成功,标记有比赛 ID 开头的部署就会出现在 Edgegap 控制面板中,几秒钟后两个客户端都会连接到该部署。退出两个客户端:服务器将在几分钟内自动停止。
其他选项:-playfabTitleId <id>、-playfabQueue <name>,以及用于在登录后立即排队的 -autoMatch。对于无头测试客户端,请添加 -batchmode -nographics -client。
6. 将 PlayFab 匹配添加到你自己的游戏中
该示例是一个可用的参考:您的代码编写代理可以直接复制其经过测试的文件,而无需从头编写。通过四项更改,即可让游戏在 Edgegap 上配合 PlayFab 匹配运行:
PlayFab 仅负责匹配。在您的队列中关闭服务器分配,以便 PlayFab 组建比赛而由 Edgegap 进行托管。无需 GSDK,也无需 PlayFab 构建版本。
两个 Azure Functions 将它们连接起来。一个在
match_found时在玩家附近部署服务器;另一个接收 Edgegap 的就绪 Webhook,并将地址和加入令牌写入每位玩家的只读数据中(azure-functions/,可直接用于任何引擎)。服务器以无头模式运行并自行停止。它监听固定端口,不保存任何机密,仅允许匹配的玩家进入,并在无人加入或所有人离开时停止部署(
EdgegapServer.cs)。该示例的网络代码是 FishNet;对于其他网络代码,请替换启动服务器和统计玩家人数的部分。客户端等待其服务器。在
Matched之后,它从其只读数据中读取EdgegapServer,并使用其加入令牌连接到host:port(PlayFabMatchmakingClient.cs,包含一个特定于网络代码的连接调用)。
配合您的代理使用:
“加载 edgegap 技能,然后加载 edgegap-playfab 以及适用于我的网络代码的技能。以 github.com/edgegap/backend-game-sample-unity-playfab-matchmaker-fishnet-spaceedge 为参考,为我的游戏添加一个可自行停止的无头服务器模式,将这两个 Azure Functions 部署到我的订阅中,并连接我的客户端以便在 PlayFab 中排队并连接到其只读数据中的地址。”
有关手动完成每个步骤的详细信息,请参阅 PlayFab 集成指南。
已知限制
每场比赛 2 名玩家。队列为 2-2,且仅对 2 人的队列进行了测试。对于规模更大的比赛,请增加队列的比赛规模并重新测试。
仅限 Windows 客户端。未测试 macOS 和 Linux 客户端版本。
未测试 WebGL。客户端代码避免了使用线程和 PlayFab SDK,因此它可以在浏览器中运行,但 Web 版本还需要一个带有 TLS Upgrade 的 WebSocket 端口。
测试了什么
于 2026 年 10 月 21 日在 Edgegap 上进行了端到端测试,使用 Unity 2021.3.45f2、Azure Functions(弹性消耗计划)上的 Node.js 22 以及大小为 2 的 PlayFab 队列:
两名客户端登录并通过 PlayFab 进行了匹配。
规则运行了
StartEdgegapDeployment,一台服务器在他们附近启动,函数调用后约 8 秒地址便发送给了两名玩家。两人均连接到同一台服务器并进行了游戏。
服务器在玩家退出后自行停止,并在无人加入的情况下于启动 2 分钟后自行停止。
加入令牌(Join tokens)以及带有 Edgegap Unity 插件的构建版本是在此运行之后推出的。它们于 2026 年 10 月 29 日通过单元测试和本地服务器容器进行了测试:匹配成功的玩家顺利进入,其他任何人均被拒绝,且崩溃退出的玩家可以重新加入。未测试项目:WebGL 客户端、大于 2 的队列、基于延迟的队列规则。
常见问题
关于结合 PlayFab 和 Edgegap 运行 SpaceEdge 示例的常见问题。
是否有适用于带有专用服务器的 Unity 的 PlayFab 匹配示例?
是的。SpaceEdge 是一款 Unity 太空射击游戏,其中 PlayFab 匹配将两名玩家配对,并且两个 Azure Functions 会在他们附近启动一个 Edgegap 专用服务器进行比赛。它已于 2026 年 10 月完成了端到端测试。
为什么该示例使用 Azure Functions 而不是 CloudScript?
微软将 JavaScript CloudScript 称为“经典”版本,并将新工作引向使用 Azure Functions 的 CloudScript。这些函数还允许部署调用在大约一秒内返回,并在服务器就绪时接收 Edgegap 的 Webhook。
游戏服务器需要 PlayFab 密钥吗?
不。密钥和 Edgegap 令牌保留在 Function App 的设置中。客户端仅保存标题 ID,并且服务器不会从 PlayFab 读取任何内容。它通过函数计算的单场比赛加入令牌来验证玩家。
如何在同一台电脑上测试两名 PlayFab 玩家?
运行具有不同自定义 ID 的两个客户端构建版本,例如 -playfabCustomId player-a 和 -playfabCustomId player-b。同一台机器上的副本共享 PlayerPrefs,因此如果不这样做,两者都会作为同一玩家登录。

客户
了解更多已接入 Edgegap 的客户案例
提供 31 个从其他平台迁移至 Edgegap 的工作室案例研究。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

台球大师巡回赛Max
RETA Games
案例研究

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

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.
案例研究

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









