Unity Gaming ServicesのCloudSave

Unity Gaming Services (UGS)には、プレイヤーのセーブデータをオンラインで保存出来るCloudSaveという機能が用意されています。

CloudSaveを使用することで、プレイヤーのセーブデータをバックアップしたり、

端末の機種変更に備えてデバイスを跨いだセーブデータの同期に対応できます。

CloudSaveを使用するための準備

UnityEditor上でPackage Managerを開きます。

  1. 左側の雲のアイコンを選択します。
  2. UGS用のパッケージが表示されるので、CloudSaveを選択します。
  3. Installをクリックします。

インストールが完了すると、Project SettingsServicesセクションの下に

CloudSaveが追加されています。

セーブデータの構造

セーブデータはKey-Value形式で扱われます。

以下の様なDictionaryで表すことが出来ます。

Dictionary<string, object> playerData = new Dictionary<string, object>
{
    {"Level", 1},
    {"Exp", 0}
};

セーブデータをクラウドに保存する

以下の様なコードを用意して実際にセーブデータを保存してみました。

SaveAsyncを呼ぶ前に、Authenticationでサインインしている必要があります。

Dictionary<string, object> playerData = new Dictionary<string, object>
{
    {"Level", 1},
    {"Exp", 0}
};

await CloudSaveService.Instance.Data.Player.SaveAsync(playerData);

その後、ダッシュボード上のCloudSaveにアクセスすると、

LevelExpの値が保存されていることが確認出来ます。

値はダッシュボード上で変更することも可能です。

セーブデータをクラウドから取得する

以下の様なコードでセーブデータの内容を取得することが出来ます。

LoadAsyncHashSetとしてキーを渡し(複数でも可)、対応する値を一括で取得できます。

値はGetAsを使って正しい型を指定する必要があります。

var result = await CloudSaveService.Instance.Data.Player.LoadAsync(new HashSet<string>{"Level", "Exp"});
foreach (var pair in result)
{
    Debug.Log($"{pair.Key} : {pair.Value.Value.GetAs<int>()}");
}

セーブデータを削除する

以下の様に呼び出すと、対象の値を削除することが出来ます。

await CloudSaveService.Instance.Data.Player.DeleteAsync("Level");

ファイルのセーブロード

ここまで、CloudSaveService.Instance.Data.Playerでプレイヤーデータとしてアクセスしてきました。

Key-Value形式は少し扱いが面倒だったり、既にセーブデータとしてファイルを保存している場合は、

ファイルをクラウドへ送ることも出来ます。

セーブ

以下の例では、セーブデータ用クラスをjson形式にし、byte列にして保存しています。

PlayerSaveData playerData = new PlayerSaveData
{
    Level = 1,
    Exp = 5
};

var json = JsonUtility.ToJson(playerData);
var data = Encoding.UTF8.GetBytes(json);
await CloudSaveService.Instance.Files.SaveAsync("SaveData", data);

ダッシュボード上はプレイヤーファイルの方に追加されます。

独自の形式でファイルとして保存している場合は、

File.ReadAllBytes メソッドでファイルをバイト列で読み込めるため、

それを送ればよいでしょう。

ロード

以下のコードで先ほどセーブしたデータを取得できます。

データが無い場合などのエラー対策は適宜行ってください。

byte[] data = await CloudSaveService.Instance.Files.Player.LoadBytesAsync("SaveData");
var json = Encoding.UTF8.GetString(data);
var playerData = JsonUtility.FromJson<PlayerSaveData>(json);

セーブデータの制限について

CloudSaveには主に、

  • CloudSaveService.Instance.Data.Player でアクセスするプレイヤーデータ
  • CloudSaveService.Instance.Data.Custom でアクセスするカスタムデータ
  • CloudSaveService.Instance.Files でアクセスするプレイヤーファイル

の3種類の保存方法が提供されていますが、それぞれ制限があります。

プレイヤーファイルの場合は、

  • 1 プレイヤーにつき合計 1 GB のファイルストレージの制限
  • 1 ファイル名につき最大 255 文字
  • 1 プレイヤーにつき最大 200 ファイル

の制限があります。

制限を守りその範囲内で使用しましょう。

まとめ

今回は、UGSCloudSaveについて解説しました。

セーブデータは端末上に保存するのが手っ取り早いですが、CloudSaveを使えば簡単にクラウド上にバックアップを取ることができるため、

対応しておくとユーザーに喜ばれそうです。

また、デバイスの機種変更時にもセーブデータをダウンロードできるので、利便性が向上します。

ファイルを送受信することも出来るので、後からでも簡単にバックアップに対応できます。

セーブ周りで悩んだらCloudSaveの対応を検討してみてください。

🔗関連ページ