Skip to main content
XBOX Game Development Kit (GDK) と Steam では、実績には名前、説明、アイコン、現在のユーザーに対して解除されているかどうか、およびオプションで完了に向けた進行状況などの情報があります。Steam には、ユーザーの進行状況を事前に決められたターゲットと比較し、ターゲットを超えたときに実績を解除するためにゲームが使用する stats API もあります。 実際、XBOX Game Development Kit (GDK) には 2 つの実績 API があります: event-based(以前は Achievements 2013 と呼ばれていました)と title-managed(以前は Achievements 2017 と呼ばれていました)です。どちらのシステムも実行可能なオプションですが、Steam から来た場合には title-managed の実績 / 統計の方がはるかに馴染みがあり、ゲームに既に存在する可能性が高い既存のロジックとマッチします。このため、このトピックではその API を説明します。2 つの API の違いの詳細については、Event-based と title-managed Achievements を参照してください。次のセクションでは、Steamworks API と XBOX Game Development Kit (GDK) の実績の違いを説明します。 タイトル管理実績 API を使用するには、XBOX services Context ハンドルを作成する必要があります。これは、XblContextCreateHandle 関数と、XUserAddResult API からの XUserHandleUser 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)

タイトル管理実績の詳細については、Getting title-managed Achievements を参照してください。

実績の進行状況を更新し、実績を解除する

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)

タイトル管理実績の詳細については、Updating title-managed Achievements を参照してください。

オフライン実績

XBOX の実績の解除にはネットワーク接続は不要です。ユーザーが XBOX network(XBOX Live としても知られる)に接続していない場合、追加のコードなしに後でサーバーで自動的に解除されます。

他のユーザーの実績を取得する

他のユーザーの実績を取得するには、実績を取得したいユーザーの XBOX User ID (XUID) を指定して XblAchievementsGetAchievementsForTitleAsync/XblAchievementsGetAchievementAsync 関数を呼び出すだけです。これは、Steam の ISteamUser::RequestUserStatsISteamUserStats::GetUserStatISteamUserStats::GetUserAchievement 関数の使用に類似しています。

実績をリセットする

Steamworks API の ISteamUserStats::ResetAllStats(ユーザーのすべての stats と、指定されていれば実績の進行状況をリセットするために使用可能)とは異なり、XBOX Game Development Kit (GDK) には、実績の進行状況や解除ステータスをプログラム的にリセスする文書化された機能はありません。進行状況値 0 で XblAchievementsUpdateAchievementAsync を呼び出そうとしても、進行状況値は変更されません。ただし、これを達成するためにテスト時に Player Data Reset tool (XblPlayerDataReset.exe) を使用できます。

レート制限

実績の進行状況を更新するとき、XBOX Services API (XSAPI) をあまりに頻繁に呼び出さないように注意してください。呼び出しすぎると、ゲームがレート制限に達する可能性があります。これは、ユーザーにとって予期しない挙動と悪い体験を引き起こす可能性があります。 頻繁に更新される stats を追跡する実績については、ある数のイベントが発生した後に、または一定の時間間隔でサーバー上で更新するように、API 呼び出しをバッチ処理してみてください。 XBOX services Trace Analyzer (XblTraceAnalyzer.exe) を使って API 呼び出しをデバッグできます。 XBOX services のレート制限の詳細については、Fine-Grained Rate Limiting を参照してください。
最終更新日 2026年8月24日