Skip to main content
游戏存档提供了一组 UI 回调,让您的游戏可以响应同步操作期间的事件。在 XBOX 和 Windows 上,平台为这些事件提供了内置 UI。在其他平台(例如 Steam Deck)上,您的游戏必须通过处理这些回调来实现自己的 UI。 在 XBOX 和 Windows 上设置回调会用您的实现覆盖平台提供的 UI。如果您的游戏需要在所有平台上为玩家提供一致的体验,这将非常有用——在所有平台上注册相同的回调,内置 UI 就不会出现。

状态机的工作原理

游戏存档使用内部状态机来协调 UI 回调与异步操作生命周期。当 UI 回调触发时,异步操作会暂停——在回调被解决之前,XAsyncBlock 回调不会触发。在游戏调用相应的响应 API 或异步操作被取消之前,状态机不会前进。 这意味着:
  • 每个回调类型都有一个相应的响应 API。调用响应 API 来告诉系统下一步做什么。
  • 响应 API 可以在回调函数内部或外部调用。
  • 如果响应操作是 Retry,操作会重试,并可能再次触发相同的回调。
  • 只有当操作达到终止状态——成功、取消或离线回退——时,XAsyncBlock 回调才会触发。
例如,如果上传由于速率限制而失败:
  1. PFGameSaveFilesUiSyncFailedCallback 触发并携带错误。
  2. XAsyncBlock 回调尚未触发——状态机等待响应。
  3. 如果用户选择 Retry 并且重试也失败,同步失败回调会再次触发。
  4. 如果用户选择 CancelXAsyncBlock 回调将触发并携带 E_PF_GAMESAVE_USER_CANCELLED
  5. 如果重试成功,XAsyncBlock 回调将触发并携带 S_OK

回调何时触发

UI 回调仅在两个异步操作期间触发:

注册回调

在调用 PFGameSaveFilesAddUserWithUiAsyncPFGameSaveFilesUploadWithUiAsync 之前注册所有回调:

回调参考

进度

报告上传或下载进度。在回调内使用 PFGameSaveFilesUiProgressGetProgress 检索当前的 PFGameSaveFilesSyncState、已完成的字节数和总字节数。 回调PFGameSaveFilesUiProgressCallback 响应 APIPFGameSaveFilesSetUiProgressResponse
进度回调不需要响应即可继续——操作会自行继续进行。仅在用户想要取消时才调用响应 API。

同步状态

PFGameSaveFilesSyncState 枚举指示操作处于哪个阶段:

同步失败

当同步操作失败时触发,例如由于网络问题或速率限制。 回调PFGameSaveFilesUiSyncFailedCallback 参数:接收 PFGameSaveFilesSyncState(失败的阶段)和 HRESULT(错误代码)。 响应 APIPFGameSaveFilesSetUiSyncFailedResponse 有关离线模式行为的更多详细信息,请参阅游戏存档离线模式

活动设备争用

PFGameSaveFilesAddUserWithUiAsync 期间,当另一台设备已经是该用户的活动设备时触发。回调接收本地和远程存档数据的 PFGameSaveDescriptor 结构,其中包括可以显示以帮助用户做出决定的设备名称、时间戳和存档大小。 回调PFGameSaveFilesUiActiveDeviceContentionCallback 响应 APIPFGameSaveFilesSetUiActiveDeviceContentionResponse 有关活动设备行为的更多详细信息,请参阅游戏存档活动设备变更

冲突

PFGameSaveFilesAddUserWithUiAsync 期间,当本地和云端存档数据发生分歧时触发。回调接收本地和远程存档数据的 PFGameSaveDescriptor 结构。 回调PFGameSaveFilesUiConflictCallback 响应 APIPFGameSaveFilesSetUiConflictResponse
冲突解决适用于整个存档,而非单个文件或文件夹。有关如何在原子单元级别检测冲突并在全局范围内解决的详细信息,请参阅游戏存档冲突

存储空间不足

PFGameSaveFilesAddUserWithUiAsync 期间,当本地设备没有足够的磁盘空间从云端下载存档数据时触发。回调接收 requiredBytes,指示所需的空间量。 回调PFGameSaveFilesUiOutOfStorageCallback 响应 APIPFGameSaveFilesSetUiOutOfStorageResponse

平台要求

有关 Steam Deck 实现的详细信息,请参阅 Steam Deck 实现指南

相关内容

最后修改于 2026年8月25日