Unity Gaming ServicesのCloudSave
Unity Gaming Services (UGS)
には、プレイヤーのセーブデータをオンラインで保存出来るCloudSave
という機能が用意されています。
CloudSave
を使用することで、プレイヤーのセーブデータをバックアップしたり、
端末の機種変更に備えてデバイスを跨いだセーブデータの同期に対応できます。
CloudSaveを使用するための準備
UnityEditor
上でPackage Manager
を開きます。
- 左側の雲のアイコンを選択します。
UGS
用のパッケージが表示されるので、CloudSave
を選択します。Install
をクリックします。
インストールが完了すると、Project Settings
のServices
セクションの下に
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
にアクセスすると、
Level
とExp
の値が保存されていることが確認出来ます。
値はダッシュボード上で変更することも可能です。
セーブデータをクラウドから取得する
以下の様なコードでセーブデータの内容を取得することが出来ます。
LoadAsync
にHashSet
としてキーを渡し(複数でも可)、対応する値を一括で取得できます。
値は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 ファイル
の制限があります。
制限を守りその範囲内で使用しましょう。
まとめ
今回は、UGS
のCloudSave
について解説しました。
セーブデータは端末上に保存するのが手っ取り早いですが、CloudSave
を使えば簡単にクラウド上にバックアップを取ることができるため、
対応しておくとユーザーに喜ばれそうです。
また、デバイスの機種変更時にもセーブデータをダウンロードできるので、利便性が向上します。
ファイルを送受信することも出来るので、後からでも簡単にバックアップに対応できます。
セーブ周りで悩んだらCloudSave
の対応を検討してみてください。