游戏弹出一条成就进度通知,显示距离目标已经完成一半,玩家看见的是一项提示。它是否同时改变了记录,又是否已经解锁成就,需要另外的依据。Valve的Steamworks概览与接口说明,恰好把这几件事分开:统计记录细粒度信息,成就表达特定目标的取得,进度弹窗则向用户呈现当前所报告的阶段。[1][2]
概览给出的例子是二十次胜利的目标,在十次胜利时显示进度,告诉用户已经到一半。[1] 这个例子包含当前值和目标值两个对象。十并不独自意味着解锁,二十也不是所有成就的固定要求;二者在此共同说明一条通知如何表达阶段。把弹窗文字缩写成“已获得成就”,就把中途提示改成了另一个状态。
接口文档的限制更直接。IndicateAchievementProgress显示带有当前成就进度的弹出通知,但调用它不会设置进度,也不会解锁成就。[2] 这不是在讨论通知够不够醒目,而是在界定通知本身做了什么。看见进度值,不能单凭这一界面事实认定相同数值已经被写入统计;看见通知出现,也不能单凭通知认定目标完成。
该接口同时列出成就名称、当前进度、解锁所需进度三个参数的含义。[2] 名称确定所指成就,两个进度值确定所显示的阶段。因此,一张只截到百分比的画面,还没有交代完整对象。这里所作的是文档语义分析,并未连接账号或读取任何玩家的真实记录,更没有用一个通知判断某款游戏存在漏记。
成功条件同样保留阶段性。接口说明要求指定成就在管理页面存在且变更已发布、该成就尚未解锁,并且当前进度小于目标进度;满足所列条件才返回成功。[2] 尤其“尚未解锁”和“小于目标”说明,这个通知的正常用途可以发生在目标完成之前。成功显示阶段进度,与成功取得成就,在文中不是同义表述。
概览在描述真正解锁时,另外讨论成就状态和存储,并说明Steam覆盖层会显示通知面板。[1] 因而,通知这种外观形式可以出现在不同情境,不能仅以“弹出来了”概括底层发生的全部事情。游戏开发资料若要解释某个界面,应写清它是阶段提示还是解锁通知,并把记录状态的证据另行保留。
本文采用概览的成就相关段及接口的IndicateAchievementProgress条目和邻接,未通读全部接口文档,网页首发日期未知。正文没有提供SDK调用步骤、配置或发行判断,也未进行代码测试。它解释的是一个清楚而有限的关系:报告进度给用户看,不会自动代替记录进度与解锁目标。
信息来源
- Valve:Stats and Achievements — Steamworks Documentation
- Valve:ISteamUserStats Interface — Steamworks Documentation
本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。