XUserHandle 完成。
跟踪成就进度
在 Steam API 中,你可以使用ISteamUserStats::GetStat/ISteamUser::SetStat API 跟踪用户朝某个成就的进度,并让 Steam Stats API 中存储的值成为当前进度值的真源。
而在作品管理型成就中,你的游戏是唯一真源,必须自行跟踪用户当前的进度。通过 API 调用在云端更新当前进度更像是一次“check in”,用于在 XBOX 生态的多个位置显示用户进度。关于当前进度值应存储在哪里,没有固定指导:许多游戏选择将其存储在存档文件中(也保存在云端),另一些则可能存储在自己的后端服务上。请务必让云端与游戏内部统计管理系统之间的值保持同步。
枚举所有成就
要使用 Steamworks API 获取用户的所有 stats,你通常会调用ISteamUserStats::RequestUserStats 从服务器拉取最新 stats。相应的回调触发后,你可以按 API 名称遍历每个成就,使用 ISteamUserStats::GetStat/ISteamUserStats::GetAchievement 函数,并用返回数据初始化游戏状态。
在 XBOX Game Development Kit(GDK)中,你可以直接使用 XblAchievementsGetAchievementsForTitleIdAsync,然后使用 XblAchievementsResultGetAchievements 的 Out 参数中数组内每个成就对象的数据初始化游戏状态。每个成就以 XblAchievement 结构体提供。有关其数据的更多信息,参见 其参考主题。
Steamworks
XBOX Game Development Kit(GDK)
更新成就进度与解锁成就
在 XBOX Game Development Kit(GDK)与 Steam 中,由游戏代码决定何时解锁成就。在 XBOX Game Development Kit(GDK)中,将成就的进度设为 100 即会解锁它。以下各节说明使用两种 API 更新用户指定成就进度所需的步骤。 以下是在两种 SDK 中实现的UpdateAchievement 方法代码示例,它接收成就 ID / API 名称(Steam 中还需 stat API 名称)、成就要增加的量、解锁该成就的目标值,并相应地更新进度与解锁状态。
Steamworks
XBOX Game Development Kit(GDK)
离线成就
解锁 XBOX 成就不需要网络连接。如果用户未连接到 XBOX 网络(也称为 XBOX Live),之后会自动与服务器同步解锁,无需额外代码。获取其他用户的成就
要获取其他用户的成就,只需调用 XblAchievementsGetAchievementsForTitleAsync/XblAchievementsGetAchievementAsync 函数,并传入你要获取成就的用户的 XBOX 用户 ID(XUID)。这类似于在 Steam 中使用ISteamUser::RequestUserStats、ISteamUserStats::GetUserStat 与 ISteamUserStats::GetUserAchievement。
重置成就
与 Steamworks API 的ISteamUserStats::ResetAllStats 不同(它可用来重置用户所有 stats 的进度,并可选地重置成就),XBOX Game Development Kit(GDK)没有以编程方式重置成就进度或解锁状态的公开能力。以进度值 0 调用 XblAchievementsUpdateAchievementAsync 会保持进度值不变。不过,在测试期间你可以使用 Player Data Reset 工具(XblPlayerDataReset.exe) 来完成此操作。
