Unity での Cloud Save の使用

このドキュメントには、Cloud Save SDK 3.0 向けの例が含まれています

典型的なワークフロー

Cloud Save SDK は、Unity 内で通常の C# スクリプトから呼び出すことができます。Unity でのスクリプティングの詳細については、スクリプトの作成と使用 を参照してください。

  1. Unity 内で C# MonoBehaviour スクリプトを作成します。スクリプトの作成と使用 を確認してください。
  2. スクリプト内で、Unity Authentication サービス を設定します。
  3. スクリプト内で、Cloud Save SDK の呼び出しを追加します。
  4. 新しく作成したスクリプトをゲームオブジェクトにアタッチします。スクリプトの作成と使用 を参照してください。
  5. Play (再生) を選択してプロジェクトを実行し、Cloud Save の動作を体験します。

MonoBehaviour スクリプトに、Cloud Save クライアントを使用するための以下の名前空間を加えます。

using Unity.Services.CloudSave;

含まれている CloudSaveSample スクリプトには、承認、サービスの初期化、Cloud Save クライアントの使用方法、および async の重要な概念が示されています。このサンプルは、Unity で Package ManagerCloud SaveSamples (サンプル) を選択すると見つかります。

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();
    }
}