Unity での Cloud Save の使用
このドキュメントには、Cloud Save SDK 3.0 向けの例が含まれています
典型的なワークフロー
Cloud Save SDK は、Unity 内で通常の C# スクリプトから呼び出すことができます。Unity でのスクリプティングの詳細については、スクリプトの作成と使用 を参照してください。
- Unity 内で C# MonoBehaviour スクリプトを作成します。スクリプトの作成と使用 を確認してください。
- スクリプト内で、Unity Authentication サービス を設定します。
- スクリプト内で、Cloud Save SDK の呼び出しを追加します。
- 新しく作成したスクリプトをゲームオブジェクトにアタッチします。スクリプトの作成と使用 を参照してください。
- Play (再生) を選択してプロジェクトを実行し、Cloud Save の動作を体験します。
MonoBehaviour スクリプトに、Cloud Save クライアントを使用するための以下の名前空間を加えます。
using Unity.Services.CloudSave;
含まれている CloudSaveSample
スクリプトには、承認、サービスの初期化、Cloud Save クライアントの使用方法、および async
の重要な概念が示されています。このサンプルは、Unity で Package Manager > Cloud Save > Samples (サンプル) を選択すると見つかります。
Cloud Save サービスには、1 プレイヤーにつき 1 分あたり 600 リクエストのレート制限があります。
項目を保存する
API Client の SaveAsync
メソッドを使用して、項目を保存します。
public async void SaveSomeData()
{
var data = new Dictionary<string, object>{{"key", "someValue"}};
await CloudSaveService.Instance.Data.Player.SaveAsync(data);
}
項目をフェッチする
API Client の LoadAsync
メソッドでオプションのキーのセットを使用して、項目をフェッチできます。
public async void LoadSomeData()
{
Task<Dictionary<string, Item>> savedData = await CloudSaveService.Instance.Data.Player.LoadAsync(new HashSet<string>{"key"});
Debug.Log("Done: " + savedData["key"]);
}
項目を削除する
API Client の DeleteAsync
メソッドを使用して、項目を削除します。
public async void DeleteSomeData()
{
await CloudSaveService.Instance.Data.Player.DeleteAsync("key");
}
キーのリストとメタデータを取得する
API Client の ListAllKeysAsync
メソッドを使用して、プレイヤーのキーのリストを取得します。
public async void RetrieveKeys()
{
Task<List<ItemKey>> keys = await CloudSaveService.Instance.Data.Player.ListAllKeysAsync();
for (int i = 0; i < keys.Count; i++)
{
Debug.Log(keys[i]);
}
}
Unity Dashboard を使用して、個々のプレイヤーのデータを表示できます。
プレイヤーファイルをバイト配列として取得する
API Client の LoadBytesAsync
メソッドを使用して、プレイヤーファイルをバイト配列として取得します。
public async void GetPlayerFileAsByteArray()
{
byte[] file = await CloudSaveService.Instance.Files.Player.LoadBytesAsync("fileName.csv");
}
プレイヤーファイルをストリームとして取得する
API Client の LoadStreamAsync
メソッドを使用して、プレイヤーファイルをストリームとして取得します。
public async void GetPlayerFileAsStream()
{
Stream file = await CloudSaveService.Instance.Files.Player.LoadStreamAsync("fileName.csv");
}
プレイヤーファイルのメタデータを取得する
API Client の GetMetadataAsync
メソッドを使用して、1 つのプレイヤーファイルのメタデータ (サイズ、最終変更日、最終作成日、キー、コンテンツタイプ、現在の WriteLock) を取得します。
public async void GetPlayerFileMetadata()
{
var metadata = await CloudSaveService.Instance.Files.Player.GetMetadataAsync("fileName.csv");
Debug.Log(metadata.Key);
Debug.Log(metadata.Size);
Debug.Log(metadata.ContentType);
Debug.Log(metadata.Created);
Debug.Log(metadata.LastModified);
Debug.Log(metadata.WriteLock);
}
プレイヤーファイルを保存する
API Client の SaveAsync
メソッドを使用して、プレイヤーファイルを保存します。
public async void SavePlayerFile()
{
byte[] file = System.IO.File.ReadAllBytes("fileName.csv");
await CloudSaveService.Instance.Files.Player.SaveAsync("key", file);
}
プレイヤーファイルを削除する
API Client の DeleteAsync
メソッドを使用して、プレイヤーファイルを削除します。
public async void DeletePlayerFile()
{
await CloudSaveService.Instance.Files.Player.DeleteAsync("key");
}
プレイヤーファイルをリスト表示する
API Client の ListAllAsync
メソッドを使用して、プレイヤーの全ファイルの名前のリストを取得します。
public async void ListPlayerFiles()
{
List<string> files = await CloudSaveService.Instance.Files.Player.ListAllAsync();
for (int i = 0; i < files.Count; i++)
{
Debug.Log(files[i]);
}
}
Unity Dashboard を使用して、個々のプレイヤーのファイルにアクセスできます。これらのファイルは、LiveOps セクションの Cloud Save モジュール内のプレイヤー詳細の下にあります。
エラー処理
エラー処理ロジックには、API のエラー応答で返されるエラーコードまたはエラータイプを使用します。エラーメッセージは将来変更される可能性があるため、使用しないでください。
エンドツーエンドの初期化と認証のフロー
以下の例は、Authentication パッケージを使用して匿名認証を開始し、プレイヤー ID を記録し、Cloud Save を初期化し、プレイヤーのすべてのキーと保存されたファイルの名前を取得する方法を示しています。
using Unity.Services.Authentication;
using System.Threading.Tasks;
using System.Collections.Generic;
using Unity.Services.Core;
using Unity.Services.CloudSave;
using UnityEngine;
public class AuthenticationExample : MonoBehaviour
{
private List<string> keys;
private List<string> files;
internal async Task Awake()
{
await UnityServices.InitializeAsync();
await SignInAnonymously();
keys = await CloudSaveService.Instance.Data.Player.ListAllKeysAsync();
files = await CloudSaveService.Instance.Files.Player.ListAllAsync();
}
private async Task SignInAnonymously()
{
AuthenticationService.Instance.SignedIn += () =>
{
var playerId = AuthenticationService.Instance.PlayerId;
Debug.Log("Signed in as: " + playerId);
};
AuthenticationService.Instance.SignInFailed += s =>
{
// Take some action here...
Debug.Log(s);
};
await AuthenticationService.Instance.SignInAnonymouslyAsync();
}
}