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

Steamクラウドの概要

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

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

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

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

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

Spacewar_Cloud_Properties.png

初期セットアップ

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ユーザーがSteamクラウドに期待する質の高い体験を最大限に提供できるクラウドAPIを可能な限り採用することを推奨します。

Steam自動クラウド

Steam自動クラウドは、SteamクラウドAPI の代替機能です。Steamクラウドを使用すれば、コードを書いたり、ゲームを修正することなくSteamクラウドをできるようになります。 必要な作業は、クラウド化するファイルのグループを指定するだけです。 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版はDefaultCompanyに設定されたカンパニーとAutocloudSampleと呼ばれるプロジェクトからのルートパスとして設定されます。 macOS、Linux/SteamOSでは、Application.persistentDataPathからの代替パスを、「パスの追加 / 置き換え」フィールド内に設定して「パスの置き換え」を有効にします。

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

Cloud_Unity_Auto-Cloud_Example.png

リリース前のテスト

Steam自動クラウドをリリース済みのゲームに追加する場合には、初期セットアップ期間中にデベロッパー専用モードを有効にして機能をテストするいくつかの追加の手順を完了してください。
  1. テストするアプリのDeveloper Compライセンスを持つアカウントでSteamにログインします。
  2. ブラウザでsteam://open/consoleを開いて、Steamコンソールを開きます。
  3. コンソールに testappcloudpaths <AppId> とテストするアプリの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クライアントを再起動してください。

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

デバッグ

まず最初に、Steamworks上で確実に変更を公開し、その後最大10分間待つか、Steamクライアントを再起動して公開された変更を受け取ってください。

Steamクラウドで問題が発生した場合は、%Steam Install%\logs\cloud_log.txtにあるログファイルを確認してください。

追加情報はSteamworks APIのデバッグを参照してください。