Skip to main content
Steam は、次の 2 つの方法でクラウドストレージを有効化します。1 つ目は、ISteamRemoteStorage API メソッドを使用してすべての読み取り/書き込みを行う方法です。これらのメソッドは、ローカルハードドライブ上のゲームのストレージフォルダーにファイルを書き込み、クラウドに同期します。もう 1 つは、コンピューターのファイルシステムに対して直接すべての読み取り/書き込みを行い、Steam Auto-Cloud を使用して、ゲームデータが含まれるローカルフォルダーをクラウドに自動同期する方法です。 XBOX Game Development Kit (GDK) は、両方のアプローチをサポートしています。
ノーコードクラウドセーブは、XBOX コンソールまたは XBOX Cloud Gaming ではサポートされていません。タイトルが Windows PC に加えてコンソールまたはクラウドを対象としている場合は、代わりに XGameSaves ラッパーまたは完全な XGameSaves API を使用してください。
コードベースのラッパーは、コンソールまたはクラウドで出荷されるタイトルにとって推奨されるパスであり、ローカルへのファイル書き込みや Steam Remote Storage API に近い形でマッピングされるため、このトピックではシンプル化されたラッパーの使用に焦点を当てています。
ラップされていない完全な XGameSaves API は、このシンプルなラッパーよりも多くの機能と柔軟性を提供します。ゲームは、決して一方から他方へ切り替えたり、API 呼び出しを混在させたりしてはいけないため、その API の機能を使用したい場合は、ラッパーを使用しないでください。XGameSaves API の詳細については、Game saves を参照してください。
次のコード例は、基本的なファイル操作が Steamworks SDK と XBOX Game Development Kit (GDK) でどのように動作するかを、2 つの API 間の微妙な違いとともに示しています。

ファイル操作の比較

次のコード例は、Steamworks Remote Storage API と GDK 相当で、基本的なファイル操作を実行する方法を示しています。これらは、provider 変数が初期化された Microsoft::Xbox::Wrappers::GameSave::Provider オブジェクトへのポインターを保持していると想定しています。 Steam Remote Storage API を使用せず、代わりに Steam Auto-Cloud を選択している場合は、Remote Storage API 呼び出しをファイルシステム API 相当に置き換えてください。

ファイルを読み取る

Steamworks

または

GDK

リファレンスドキュメント

Microsoft.Xbox.Wrappers.XGameSave.Provider.Load

ファイルを書き込む

Steamworks

または

XBOX Game Development Kit (GDK)

リファレンスドキュメント

Microsoft.Xbox.Wrappers.XGameSave.Provider.Save

ファイルの削除

Steam では、クラウド内のファイルを削除してローカルコピーは保持する (FileForget)、あるいは両方の場所からファイルを削除する (FileDelete) のどちらかを行うことができます。XGameSave ラッパー API には FileForget に相当する機能はありません。その Delete 関数は、Steamworks の FileDelete と同様に動作します。

Steamworks

または

XBOX Game Development Kit (GDK)

または
または

リファレンスドキュメント

すべてのファイルを取得する

Steamworks

XBOX Game Development Kit (GDK)

リファレンスドキュメント

利用可能な容量を確認する

次の例では、totalBytes はクラウドストレージプロバイダーがゲームに割り当てた容量、availableBytes は残りの空き容量です (つまり、availableBytes = totalBytesbytesUsed)。

Steamworks

XBOX Game Development Kit (GDK)

リファレンスドキュメント

Microsoft.Xbox.Wrappers.XGameSave.Provider.GetQuota

用語の違い

Steam では、リモートストレージのデータはファイルとして管理され、ローカルハードドライブ上のファイルと同じように動作します。読み取りと書き込みは、読み書きしたいファイルを指定し、そのファイルに含まれるバイトを取得/設定することによって行われます。 XBOX Game Development Kit (GDK) では、Steam のファイルに相当するものは ブロブ (blob) であり、ブロブは コンテナー (container) と呼ばれる構造にまとめられます。コンテナーは単に名前付きのブロブグループです。コンテナーは、たとえば、ユーザーごとに複数のセーブスロットを持ち、各スロットに同じファイル名を持たせるために使用できます。コンテナーが提供する追加の整理レイヤーが不要な場合は、すべてのブロブ (ファイル) を同じコンテナーに配置するだけです。
コンテナー名にスペースを含めることはできません。スペースを含むコンテナー名にアクセスまたは作成しようとすると、
プロバイダーメソッドが 0x80830001 の HRESULT を返します: 指定されたボリュームはストレージ層をサポートしていません。

ストレージ制限

XBOX Game Development Kit (GDK) は、Steam よりも最大ブロブ/ファイル書き込みサイズと全体的なストレージ制限が低くなっています。Steam では、各ファイル書き込み操作は 100 メビバイト (MiB) に制限されています。各ファイルは 200 MiB を超えることはできませんが、XGameSave API とそのラッパーでは、各ブロブが 16 MB を超えることは許されず、ユーザーごとおよびゲームごとに最大 256 MB のストレージ許容量となっています。 ブロブに 16 MB を超えるデータを保存する必要がある場合は、データを複数のブロブに分割し、一度に 1 つのブロブずつデータを読み書きするシーケンシャル読み取り/書き込み関数を実装する必要があります。

ラッパー関数はブロッキング

ISteamRemoteStorage インターフェイスは、読み取り/書き込み関数の 2 つのバージョンを提供しています: FileRead/FileWriteFileReadAsync/FileWriteAsync です。後者は、ファイルの読み取り/書き込みが完了した時点でコールバックする非同期関数です。シンプル化された XGameSave ラッパー関数は、FileRead/FileWrite に相当する非同期バージョンを提供していません。ただし、Provider::LoadProvider::Save はどちらもブロッキングであるため、ゲーム内で使用する際にはその点に注意してください。 このため、Provider::InitializeUI スレッドから呼び出されると例外をスローします

初期化

他の何かを行う前に、ゲームのソリューションにラッパーのヘッダーファイルを含める必要があります。これは %GRDKLatest%\GameKit\Include\xgamesavewrappers.hpp にあります。 XGameSaves ラッパーのメソッドを使用する前に、Provider クラスのインスタンスを作成する (ゲームのライフタイムを通じてそのポインターを保持する必要があります) と、Provider::Initialize メソッドを呼び出す必要があります。繰り返しになりますが、このメソッドは UI とは別のスレッドで呼び出す必要があり、UI スレッドから呼び出された場合は例外がスローされる点に注意することが重要です。ラッパープロバイダーを初期化するには、現在のユーザーの XUserHandle とゲームのサービス構成識別子 (SCID) が必要であることに注意してください。

リファレンスドキュメント

Microsoft.Xbox.Wrappers.XGameSave.Provider.Initialize
最終更新日 2026年8月24日