XUserHandle(User authentication and ownership トピックから)で行えます。
実績の進行状況を追跡する
Steam API では、ISteamUserStats::GetStat/ISteamUser::SetStat API を使用して実績に向けたユーザーの進行状況を追跡でき、Steam Stats API に保存された値が現在の進行状況値の Source of Truth になります。
タイトル管理実績では、ゲームが単一の Source of Truth であり、ユーザーの現在の進行状況を自身で追跡する必要があります。API 呼び出しでクラウド上の現在の進行状況を更新することは一種の「チェックイン」として行われ、XBOX エコシステム全体のいくつかのサーフェスでユーザーの進行状況を表示するために使用されます。現在の進行状況値をどこに置くべきかについての特定のガイダンスはありませんが、多くのゲームはそれをセーブ ファイル(およびクラウド)に保存することを選択し、他のゲームは独自のバックエンド サービスに保存する場合があります。クラウドとゲームの内部統計管理システム間で値の同期を保つように必ず行ってください。
すべての実績を列挙する
Steamworks API でユーザーの全統計を取得するには、通常ISteamUserStats::RequestUserStats を呼び出してサーバーから最新の統計を取得します。対応するコールバックが発火した後、ISteamUserStats::GetStat/ISteamUserStats::GetAchievement 関数を使って各実績を API 名で反復処理し、返されたデータを使ってゲームの状態を初期化できます。
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 network(XBOX Live としても知られる)に接続していない場合、追加のコードなしに後でサーバーで自動的に解除されます。他のユーザーの実績を取得する
他のユーザーの実績を取得するには、実績を取得したいユーザーの XBOX User ID (XUID) を指定して XblAchievementsGetAchievementsForTitleAsync/XblAchievementsGetAchievementAsync 関数を呼び出すだけです。これは、Steam のISteamUser::RequestUserStats、ISteamUserStats::GetUserStat、ISteamUserStats::GetUserAchievement 関数の使用に類似しています。
実績をリセットする
Steamworks API のISteamUserStats::ResetAllStats(ユーザーのすべての stats と、指定されていれば実績の進行状況をリセットするために使用可能)とは異なり、XBOX Game Development Kit (GDK) には、実績の進行状況や解除ステータスをプログラム的にリセスする文書化された機能はありません。進行状況値 0 で XblAchievementsUpdateAchievementAsync を呼び出そうとしても、進行状況値は変更されません。ただし、これを達成するためにテスト時に Player Data Reset tool (XblPlayerDataReset.exe) を使用できます。
