本指南介绍如何使用 2025 年 10 月 GDK(版本 2510)实现 PlayFab Game Saves。无论你是初次使用 Game Saves,还是从以前的实现迁移,本文档都提供了基本要求和设置说明,并特别关注 Steam Deck 支持。
实现要求概述
使用 2025 年 10 月 GDK 实现 PlayFab Game Saves 时,你需要了解四个关键组件:- 新的 GDK 文件夹布局:以平台为中心的 SDK 目录结构
- XGameRuntime 集成:具有特定部署要求的跨平台运行时
- PlayFab Unified SDK:适用于所有 PlayFab 组件的现代 SDK 体系结构
- 其他 Unified SDK 组件:更新后的 Party 和 Multiplayer 组件(如果使用)
**初次使用 Game Saves?**请先阅读 Game Saves 概述和快速入门指南以了解基础知识,然后返回此处了解特定于 2025 年 10 月 GDK 的实现详细信息。
- GDK 文件夹布局和路径配置
当前 GDK 结构
2025 年 10 月 GDK 使用扁平的、以平台为中心的目录结构。了解此布局对于正确设置生成系统至关重要。 2025 年 10 月 GDK 布局:$(GDK)\GRDK\ and $(GDK)\GXDK\) 已被替换。请相应地更新生成脚本。
设置生成系统
必需的路径配置
将生成系统配置为使用正确的特定于平台的路径:生成系统配置示例
CMake 设置:如果你使用原生 x64 平台、CMake 或其他生成系统(而不是 Gaming.Desktop.x64 平台)为 Windows 生成,则需要自行定义
_GAMING_DESKTOP。Gaming.Desktop.x64 平台会自动定义它。如果未定义,SDK 标头将针对非 GDK 的 Windows 平台进行编译,PFInitialize 等函数不会被声明,从而导致 C3861: 'PFInitialize': identifier not found 等错误。有关详细信息,请参阅将 x64 平台与 Microsoft 游戏开发工具包 (GDK) 一起使用。平台支持详细信息
- XBOX:对所有最新的 XBOX 主机世代使用
xbox文件夹 - Windows:所有 Windows 平台(PC、Steam PC、Steam Deck-Proton)均使用
windows文件夹 - Steam Deck:尽管运行 SteamOS,但为了与 Proton 仿真兼容,使用
windows文件夹
实现步骤
-
配置生成系统
- 使用新的 GDK 结构设置包含路径和库路径
- 如果面向多个平台,请添加平台检测逻辑
- 在所有目标平台上测试编译
-
验证 Game Saves 集成
- 确保所有必需的库都能正确链接
- 在目标平台上测试功能
- 验证 PlayFab 服务连接
- XGameRuntime 集成
了解 XGameRuntime
XGameRuntime 为所有平台上的 XBOX Live 服务和 Game Saves 功能提供基础。以下是你需要了解的内容:核心组件
xgameruntime.lib(导入库)- 在编译时链接到游戏项目中
- 自动查找并加载运行时 DLL
- 处理服务发现(本地与系统)
- 实现 XBOX Live 和 Game Saves 功能
- 位置:
{GDK}\windows\bin\xgameruntime.dll - 对 Steam 版本至关重要:必须随游戏一起部署
实现要求
- 基本集成
所有 Game Saves 实现都需要初始化 XGameRuntime:
- Steam 平台要求
对 Steam 版本必不可少:
为 Steam 生成时,你必须在游戏目录中包含 xgameruntime.dll。如果没有此 DLL,在 Steam Deck 上运行时:
- XBOX Live 身份验证将失败
- Game Saves 功能将不可用
Microsoft Store 版本会自动从系统加载 XGameRuntime,无需部署 DLL。
- 自动 DLL 部署
CMake 配置:
特定于平台的运行时行为
Steam Deck 支持特别要求部署本地 DLL。系统无法像其他平台那样回退到系统服务。此外,同步引擎在进程内运行,这意味着游戏必须确保在关闭之前同步关键的存档数据。
- PlayFab Unified SDK 集成
什么是 PlayFab Unified SDK?
PlayFab Unified SDK 是一个现代、统一的 SDK,它将所有 PlayFab 组件整合到单一体系结构下。Game Saves 现在是此统一系统的一部分,可提供: Game Saves 开发的优势:- 跨所有 PlayFab 组件的统一内存管理
- 一致的异步操作模式
- 集成的跟踪和诊断
- 模块化组件加载(仅包含所需内容)
必需的 SDK 组件
Game Saves 实现需要以下 Unified SDK 组件: 基本组件:- libHttpClient:跨平台 HTTP/WebSocket 通信
- PlayFab Core:身份验证、实体管理和配置
- PlayFab GameSave:Game Saves 特定功能
- PlayFab Services:用于 LiveOps、帐户管理和其他进度系统的共享服务(如果使用其他 PlayFab 服务,则建议使用)
库和 DLL 要求
链接所需的库
部署所需的 DLL
生成系统配置
MSBuild 设置
将 Visual Studio 项目配置为链接 Unified SDK:$(GDK)\GRDK\...\include 等旧路径替换为上面所示的新结构。
CMake 设置
对于基于 CMake 的项目,请配置依赖项和部署:代码实现
必需的标头
在项目中包含必要的 Unified SDK 标头:初始化顺序
按照以下初始化顺序正确设置 Game Saves:正确的清理顺序
关闭应用程序时,按相反顺序清理资源:始终对 PlayFab Services 和 Core 使用异步清理模式,以确保正确释放资源。
- 其他 PlayFab Unified SDK 组件
Party 和 Multiplayer API 更改
虽然 Game Saves 功能并不直接需要,但 2025 年 10 月 GDK 还包含 PlayFab Party 和 PlayFab Multiplayer 组件的更新版本,作为 Unified SDK 的一部分。这些组件具有新的 API,能够更好地与统一身份验证系统集成。与独立 SDK 相比的主要变化
身份验证集成:- 旧模式:以前,使用独立 Party/Multiplayer SDK 的游戏必须手动管理 PlayFab 登录结果中的
EntityID和EntityToken,并将其传递给 Party/Multiplayer API - Unified SDK 模式:Party 和 Multiplayer 现在直接接受
PFEntityHandle,无需手动管理令牌
- Party:接受
PFEntityHandle进行用户身份验证的新 API - Multiplayer:接受
PFEntityHandle进行大厅和匹配操作的新 API
- 简化的身份验证流程,可自动刷新令牌
- 所有 PlayFab 组件之间一致的错误处理模式
- 统一的内存管理和异步操作模式
Party 和 Multiplayer 组件:如果你的游戏使用 PlayFab Party 或 Multiplayer,请考虑迁移到直接接受
PFEntityHandle 的新统一 API,以改进集成。但是,Game Saves 功能并不需要这样做;如果你仅使用 Game Saves,可以放心跳过第 4 节。
- Steam Deck 实现
PlayFab Game Saves 的 Steam Deck 支持需要在标准 PC 版本之外进行大量额外实现,包括自定义身份验证流程、全面的 UI 回调和审慎的同步策略。
Steam Deck 实现的复杂性:Steam Deck 集成涉及自定义身份验证流程、UI 回调实现以及关键的同步行为差异。由于实现要求复杂且篇幅较长,Steam Deck 实现在其单独的专用指南中介绍。
Steam Deck 的主要注意事项
关键同步行为差异:- Windows PC:Game Saves 在进程外运行,并且可以在游戏关闭后继续同步
- Steam Deck:Game Saves 仅在进程内运行,并在游戏关闭时停止同步
- 所有 Unified SDK DLL 都必须随 Steam 版本一起部署
- 带有 UI 回调的自定义 XUser 身份验证流程
- 用于非零售沙盒测试的注册表配置
- 频繁的同步模式,以防止数据丢失
- 频繁同步存档数据(在每个关卡、检查点或重要进度之后)
- 始终在显示”退出游戏”确认之前进行同步
- 考虑在游戏过渡期间进行后台同步
- 实现同步进度指示器,以确保在关闭之前完成同步
完整的 Steam Deck 实现
有关全面的 Steam Deck 实现详细信息,包括:- 详细的身份验证流程设置
- 完整的 UI 回调实现
- 分步初始化顺序
- 故障排除指南
- 示例代码参考
- 实现清单
入门(新实现)
- 设置 2025 年 10 月 GDK 并验证安装
- 使用正确的 GDK 路径和库引用配置生成系统
- 将 Unified SDK 库添加到项目链接配置中
- 在源代码中包含必需的标头
- 按照 Unified SDK 模式实现初始化顺序
- 为 Steam 版本设置 DLL 部署(4 个必需 DLL,1 个可选)
- 在目标平台上测试基本功能
迁移(现有实现)
- 将生成系统路径从旧 GDK 结构更新为新布局
- 将独立库替换为 Unified SDK 组件
- 更新标头包含以使用新的 Unified SDK 标头
- 修改初始化顺序以使用新的 Unified SDK API
- 使用正确的异步清理模式更新清理顺序
- 向 Steam 部署添加其他 DLL(1 个 DLL → 4-5 个 DLL)
- 验证迁移后功能是否保持完好
生成系统配置
- 包含路径:设置为
$(GDK)\windows\include(或平台等效路径) - 库路径:设置为
$(GDK)\windows\lib\x64(或平台等效路径) - 链接库:将所需的 .lib 文件添加到链接器依赖项(4 个必需,1 个可选)
- DLL 部署:为 Steam 版本配置自动复制
- 平台检测:如果为多个平台生成,请添加相应逻辑
代码实现任务
- 标头:包含所有必需的 Unified SDK 标头
- 初始化:实现正确的 5 步初始化顺序
- 错误处理:为每个初始化步骤添加适当的错误检查
- 清理:使用异步模式实现逆序清理
- 配置:将硬编码值替换为你的 PlayFab Title ID 和终结点
测试要求
- Windows PC:验证 Game Saves 功能
- Steam Deck:使用 Steam Deck 实现指南完成实现
- Microsoft Store:确认功能没有回归
- 跨平台:测试所有平台(PC、Steam Deck、XBOX)之间的存档同步
- 资源和支持
文档链接
示例代码参考
- Windows Game Saves 示例:PlayFabGameSaveSample-Windows
GameSaveIntegration.cpp/.h- 核心 Game Saves 集成SteamIntegration.cpp/.h- Steam Deck 特定实现(请参阅 Steam Deck 指南)GameSaveIntegrationUI.cpp/.h- UI 回调实现(请参阅 Steam Deck 指南)
