一起玩
PlayDrop 游戏的成就
在 catalogue.json 中声明带图标的普通成就和累进成就,并用 sdk.achievements 解锁成就、上报进度。
成就标记游戏中的目标,带有玩家在 PlayDrop 上看到的图标和说明。访客和已登录玩家都能获得成就。
声明成就
json
{
"achievements": [
{ "key": "first-win", "displayName": "First flag", "description": "Reach the flag once",
"kind": "STANDARD", "icon": "achievements/first-win.png" },
{ "key": "collector", "displayName": "Collector", "description": "Collect 100 stars",
"kind": "INCREMENTAL", "maxProgress": 100, "icon": "achievements/collector.png" },
{ "key": "secret-room", "displayName": "Secret room", "description": "Find the hidden room",
"kind": "STANDARD", "hidden": true, "icon": "achievements/secret-room.png" }
]
}key的格式与排行榜的键相同。kind为STANDARD(解锁一次)或INCREMENTAL(进度达到maxProgress时解锁,maxProgress为正整数)。icon是包中的 PNG 图片。请使用清晰的方形图片,确保缩小后也能看清。hidden: true会在解锁前隐藏名称和说明。
已发布的键不能删除,kind、maxProgress 和 hidden 也不能更改。要停用某个成就,请设置 "status": "RETIRED"。
解锁成就并上报进度
js
await sdk.achievements.unlock("first-win");
await sdk.achievements.setProgressAtLeast("collector", starsCollected);
const { achievements } = await sdk.achievements.list();
const { achievement } = await sdk.achievements.get("collector");setProgressAtLeast接收截至目前的累计总量,绝不是增量。进度只会上升,以maxProgress为上限,并在达到上限时解锁。- 两个调用都会返回
{ accepted, changed, unlocked, progress, unlockedAt, achievement };没有新变化时changed为 false,这样你自己的提示只会显示一次。 list({ includeHiddenDefinitions: true, includeRetired: true })会包含隐藏和已停用的定义。
只在真实游玩时解锁成就,绝不能在预览或录制中解锁。完全没有玩家会话时,调用会正常完成,但不会保存。
好的成就
把教玩家上手的早期成就和长期目标搭配起来。用动作命名,而不是用奖励命名:“无伤获胜”直接说明了要做什么。十几个用心设计的成就,胜过一百个无关紧要的成就。