Steamworks ドキュメンテーション
Steamクラウド
概略
Steamクラウドは、ゲームからファイルをSteamのサーバーに自動で保存し、プレイヤーはSteamにログインすればどのコンピューターからでもセーブゲームにアクセスできます。
統合のレベル
ファイルパス構成はSteamworksウェブサイト上にある必要があります。 アップロード、ダウンロード、列挙、削除には、ゲームコード内でSteamworksへのAPI呼び出しが適宜必要です。

Steamクラウドの概要

Steamクラウドは、ゲームに簡単で透過性のあるリモートファイルストレージシステムを提供します。 自動クラウド設定で指定されたファイルや、クラウドAPIを使用してディスクに書き込まれた (作成/変更/削除された) ファイルは、ゲーム終了後に自動的にSteamサーバーに複製されます。

ユーザーが違うコンピュータからゲームにアクセスする場合には、ゲームの起動前に新しいコンピュータにファイルが自動的にダウンロードされます。 ゲームは、クラウドAPIを通してファイルを読み込むか、通常通りディスクから直接読み込みます。 ビデオ設定等、マシン固有の構成は避けてください。

Steamクライアントは確実に、ゲームにアクセスしたすべてのコンピュータ上でのファイルの同期が維持されるようにします。

Steamクライアントの「設定」メニューの「クラウド」タブで「Steamクラウドを有効化して、サポートするアプリ情報を同期化する」のチェックを外すことで、ユーザーはクラウドとの同期をグローバルに解除できます。

ユーザーは、各ゲームのプロパティから、ゲームごとにクラウド同期を無効にすることもできます。

Spacewar_Cloud_Properties.png

ベストプラクティスと備考


Steamは、ゲームセッションの前後にユーザーのSteamクラウドファイルと同期することを覚えておくことは重要です。 セッション中に変更されたマッチメイキングファイルは、終了後すぐにクラウドストレージにアップロードされます。 ゲームが非常に大きなファイルまたは多くの小さなファイルをSteamクラウドに書き込む場合、ユーザーのインターネット帯域幅に顕著な影響を与え、Steamのシャットダウンやゲームの再起動に遅延を発生させる可能性があります。

一般的な規則として、小さいファイルの方が適切に機能します。 ユーザーの保存状態を異なるカテゴリ(頻繁に変更される場合と頻繁に変更されない場合)に分割できる場合は、カテゴリ毎に個別のファイルを使用することが推奨されます。 こうすれば、変更のない状態は、セッションごとに再アップロードされません。

ファイルサイズの制限


Steamクラウドのファイルサイズの絶対制限は、時間の経過とともに変化する可能性があります。 現在の制限としきい値は次のとおりです:

サイズ制限
100MBISteamRemoteStorage::FileWriteまたは
ISteamRemoteStorage::FileWriteStreamWriteChunkの呼び出しの最大サイズ
256MBユーザーの場所に最適ではないストレージエンドポイントが選択され、アップロード/ダウンロードのパフォーマンスに悪影響を及ぼす可能性があります

初期セットアップ

Steamクラウドの設定には、Steamworksのアプリ管理パネルから Steamクラウド設定 ページを開きユーザー毎のバイトクォータユーザーが持てるファイル数を決定する必要があります。

この割り当てはクラウド対応のそれぞれゲームで各ユーザー毎に適用されます。 ゲームタイトルに適した値を設定することを推奨しています。

注: ページの下部の「保存」をクリックし、更新された設定を忘れずに公開してください。 公開後に、ゲームを所有するユーザーのSteamクライアント上に、クラウドアイコンが表示されるようになります。

ゲームが既に公開済みの場合は、 クラウドサポートをデベロッパーにのみ有効化というチェックボックスにマークを入れることができます。 ここにチェックが付いている場合、このタイトルの「Developer Comp」ライセンスを所有するSteamアカウントのみにクラウドのアイコンが表示され、Steamクラウドを使用することができます。 これは、ユーザーの体験を損なうことなくSteamクラウドの統合を安全にテストする際に便利です。 未公開のゲームの場合はゲームの所有者がいないので、その特定のApp IDに対してクラウドストレージを見られたり、アクセスされることがないため、チェックを付けても何の影響もありません。

共有クラウドApp IDフィールドに入力することで、2つのApp ID間でクラウドストレージスペースを共有することができます。 これはゲームの体験版と製品版の間でのセーブデータを共有するために最もよく使われます。 値が0の場合、この機能は無効です。

SteamクラウドAPIとSteam自動クラウド

Steamは、Steamクラウドの利用に2つの異なる方法を提供しています。2つの方法の違いについて理解し、アプリケーションにとって最適な方法を決定してください。

1 つめの方法は、SteamクラウドAPI です。
クラウドAPIでは、ゲームにSteamクラウドを直接統合するための一連の関数が用意されています。 クラウドAPIは個々のSteamユーザーファイルを互いに分離し、Steamクラウド上での高度な制御を提供します。

SteamクラウドAPIは ISteamRemoteStorage APIインターフェイスで公開されており、Steamworks APIのサンプルアプリケーション(SpaceWar)で使用例を確認できます。

2つ目の方法は Steam自動クラウドです。
Steam自動クラウドは、SteamクラウドAPIを統合しないゲーム用です。 これは、迅速かつ簡単な方法でクラウドを提供しますが、SteamクラウドAPIの柔軟性には劣ります。

例えば、クラウド内のセーブファイルから選択させる等のSteamクラウドとのより深い統合を希望する場合には、クラウドAPIを使ってください。 そうでなければ、Steamの自動クラウドを使用できます。

Steam自動クラウド

Steam自動クラウドは、SteamクラウドAPI の代替機能で、コードを書いたり、ゲームを修正することなく、アプリでSteamクラウドを使用できるようにします。 必要な作業は、クラウドに保存するファイルのグループを指定するだけです。 Steamは、アプリケーションの起動時と終了時に、これらファイルグループを自動的に同期します。 動画の品質など、マシン固有の構成は避けてください。
注:steam_autocloud.vdfファイルはSteamworksクラウドパスによって指定された場所にそれぞれ作成されます。 このファイルはSteamが使用し、ゲームは無視することができます。

セットアップ

初期セットアップ完了後に、Steamクラウド設定ページ内のSteam自動クラウドの設定セクションが使えるようになります。

ルートパスはSteamクラウドに保存されるファイルのグループを表します。 各ルートパスには、単一のファイルを指定したり、またサブフォルダ内のすべてのファイルといった、広範囲な指定も可能です。 同期には、ファイルのグループごとに新しいパスを使用してください。

ルートパスは5つの部分から構成されています:
  1. ルート

    これはセーブゲームが通常保存される、所定のパスのリストです。
    ルートサポート対象のOS所定のパス
    アプリのインストールディレクトリすべて[Steam Install]\SteamApps\common\[Game Folder]\
    SteamCloudDocumentsすべてプラットフォーム特有のパス。例えばLinuxでは x: ~/.SteamCloud/[username]/[Game Folder]/
    WinMyDocumentsWindows%USERPROFILE%\My Documents\
    WinAppDataLocalWindows%USERPROFILE%\AppData\Local\
    WinAppDataLocalLowWindows%USERPROFILE%\AppData\LocalLow\
    WinAppDataRoamingWindows%USERPROFILE%\AppData\Roaming\
    WinSavedGamesWindows%USERPROFILE%\Saved Games\
    MacHomemacOS~/
    MacAppSupportmacOS~/Library/Application Support/
    MacDocumentsmacOS~/Documents/
    LinuxHomeLinux~/
    LinuxXdgDataHomeLinux$XDG\_DATA\_HOME/
  2. サブディレクトリ

    ルートに対するクラウド化されたファイルへのサブディレクトリパスです。 サブディレクトリがない場合は、「.」を入力してください。

    自動クラウド特別パス値
    自動クラウドでは、サブディレクトリのパスに、一意のSteamユーザーIDを使用できます。 これにより、コンピューター上のSteamユーザー毎に、別々にファイルが保存できるようになります。 ゲーム内でISteamUser::GetSteamIDを使うと、現在のユーザーのSteamIDまたはAccountIDを保存、読み込みできるようになります。
    • {64BitSteamID}-Steamパスにユーザーの64bit Steam IDを挿入する場合は、この変数を使用。 64 bit Steam IDの例 : 76561198027391269
    • {Steam3AccountID}-SteamパスにユーザーのSteam 3アカウントIDを挿入する場合は、この変数を使用。 アカウントIDの例:67125541
    例 : SavesDir/{64BitSteamID}
  3. パターン

    一致するファイルマスクのパターン。 * をワイルドカードとして使用できます。 ディレクトリ内の全ファイルが必要な場合には * を使用してください。

    例 : *.sav
  4. OS

    ファイルの同期元・先となるオペレーティングシステムを設定します。 これは、ファイルがOS固有である場合にのみ必要です。(そうでないことが望ましいですが!)
  5. 再帰検索

    一致するファイルの検索時にサブディレクトリを含めます。 これはSteamユーザーの名前やIDではない、非確定的なの名前のサブディレクトリに有用です。 Steam IDを使用している場合には、サブディレクトリフィールド内に後述の特別パス値を使用することを強く推奨します。

ルートオーバーライド

アプリがクロスプラットフォーム対応で、OSごとに異なるディレクトリを必要とする場合は、 ルートオーバーライド機能を利用して代替パスを設定できます。

上記で指定したルートパスは、別のOS上の対応する別のパスにオーバーライドすることができます。 ルートオーバーライドを使用する場合は、上記の [ルートOS] ドロップダウンで [すべてのOS] を指定する必要があります。

ルートオーバーライドは5つの部分で構成されています。
  1. オリジナルルート

    これは上記で設定したルートの一つに相当します。
  2. OS

    オーバーライドを適用するオペレーティングシステムです。
  3. 新しいルート

    指定したOS上で、オリジナルルートがマップする新しいロケーションです。
  4. パスの追加 / 置き換え

    これにより、オプションとして、新しいルートとオリジナルのサブディレクトリの間に挿入されるサブディレクトリパスを追加することができます。
  5. パスの置き換え

    「パスを置き換え」を有効にすると、「パスの追加 / 置き換え」で指定されたパスでオリジナルのサブディレクトリ全体を置き換えます。

例:Unityアプリケーションに自動クラウドを設定

以下は、OS毎にApplication.persistentDataPathプロパティ値が異なる場合にUnityで自動クラウドを設定するための例です。 Windows版はUnity内でDefaultCompanyに設定された企業とAutocloudSampleと呼ばれるプロジェクトのルートパスとして設定されます。 macOS、Linux/SteamOS では、Application.persistentDataPathからの代替パスを、「パスの追加 / 置き換え」フィールド内に設定して「パスの置き換え」を有効にします。

これらを設定すると、プレビュー内のサンプルのように、自動クラウドファイルが3つのフォルダ間で同期されます。

Cloud_Unity_Auto-Cloud_Example.png

リリース前のテスト

Steam自動クラウドをリリース済みのゲームに追加する場合には、初期セットアップ期間中にデベロッパー専用モードを有効にして機能をテストするいくつかの追加の手順を完了してください。
  1. テストするアプリを所有するアカウントでSteamにログインします。
  2. ブラウザでsteam://open/consoleを開いて、Steamコンソールを開きます。
  3. コンソールに testappcloudpaths とテストするアプリのapp IDを入力します。 例 : testappcloudpaths 480
  4. コンソールにset_spew_level 4 4と入力します。
  5. Steamからアプリを起動します。
  6. コンソールでアクティビティをチェックしてください。自動クラウドパスに既存のファイルがある場合には、アップロードされることを確認してください。 ファイルが無ければ、アプリ用のいくつかのファイルが保存され、アプリを閉じると同期を開始します。
  7. 別のPCから上記ステップを繰り返して、Steam自動クラウドからファイルがダウンロードされるかを確認します。
  8. ゲームがサポートする全てのオペレーティングシステムでテストしてください。
  9. テストを終了するにはtestcloudapppaths 0set_spew_level 0 0を設定してください。 コンソールタブを取り除くには Steamクライアントを再起動してください。

テスト完了後は、デベロッパー専用モードを無効化にして変更を公開することをお忘れなく!

Dynamic Cloud Sync


Steam Cloud now supports dynamic sync - where changes appearing in the Cloud can be downloaded to the local machine during an application session. The current example is a suspended game session on the Steam Deck. For apps marked as supporting dynamic Cloud sync, Steam will synchronize files up to the Steam Cloud at the suspend time. Then, the user may run the game on another device, which will receive the updates from the Steam Deck session at launch. At exit, those changes will be uploaded to the Steam Cloud. Finally, when the Steam Deck device is awakened, Steam will synchronize the changes down to that device, and post a notification to the application that local files have changed. The application can then iterate those changes and take appropriate action. For instance, the game may be able to simply load the updated progress from disk and allow the user to pick up right where they left off on the other device.

Currently, the ability to flag an application as supporting dynamic Cloud sync is only available to Valve admins. Get in touch with your Valve contacts for more detail.

Note that this feature supports applications whether they use the ISteamRemoteStorage API to manage files, or AutoCloud.

For more details, see the ISteamRemoteStorage documentation, specifically ISteamRemoteStorage::RemoteStorageLocalFileChange_t, ISteamRemoteStorage::GetLocalFileChangeCount, and ISteamRemoteStorage::GetLocalFileChange.

See also ISteamRemoteStorage::BeginFileWriteBatch and ISteamRemoteStorage::EndFileWriteBatch - these wrappers should be used to provide hints to Steam which will help it safely sync up to the Steam Cloud at the time when the user initiates a system suspend.

Debugging

First, always ensure that you have published your changes on the Steam partner website and have waited up to 10 minutes or restarted your Steam client to receive the published changes.

If you run into issues with Steam Cloud you should check the log file located at %Steam Install%\logs\cloud_log.txt.

See Steamworks APIのデバッグ for additional information.