一緒に遊ぶ
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(1回で解除)またはINCREMENTAL(進行状況が正の整数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 になるので、独自の通知を1回だけ表示できます。 list({ includeHiddenDefinitions: true, includeRetired: true })は、隠し実績と終了した実績の定義も含めて返します。
解除は実際のプレイ中だけに行い、プレビューやキャプチャでは絶対に行わないでください。プレイヤーセッションがまったくない場合、呼び出しは保存されないまま正常終了します。
良い実績とは
ゲームの遊び方を教える序盤の実績と、長期的な目標を組み合わせましょう。名前には報酬ではなく行動を入れます。「ノーダメージで勝利する」なら、何をすればよいかが伝わります。よく考えた十数個の実績は、ありきたりな100個に勝ります。