メインコンテンツまでスキップ

クラウドセーブに SDK を使用する - クラウドセーブ - (Unity モジュール)

Last updated on February 4, 2026

注釈:本資料はAI技術を用いて翻訳されています。

ラッパーを開く

このチュートリアルでは、AccelByte Gaming Services (AGS) Software Development Kit (SDK) を使用して、音楽と効果音 (SFX) のボリュームのゲーム設定を保存および取得する AGS クラウドセーブの実装方法を学びます。

AGS クラウドセーブは、以下のレコードタイプをサポートしています:

  • プレイヤーレコード: ゲーム設定や環境設定などのプレイヤーデータを保存するために使用されるレコードタイプ。
  • ゲームレコード: ゲームのお知らせ、イベント設定などのゲームデータを保存するために使用されるレコードタイプ。

Byte Wars では、CloudSaveEssentialsWrapper クラスで定義されたゲームインスタンスラッパーがあります。このラッパーは、ゲーム設定を保存するために AGS クラウドセーブのプレイヤーレコード値を操作するために使用されます。

このチュートリアルでは、CloudSaveEssentialsWrapper クラスのスターターバージョンである CloudSaveEssentialsWrapper_Starter ラッパーを使用して、機能をゼロから実装します。

スターターパックの内容

このチュートリアルに従うには、CloudSaveEssentialsWrapper_Starter というスターターラッパークラスを使用します。このラッパーは、以下のファイルで定義されています:

  • C# ファイル: Assets/Resources/Modules/Storage/CloudSaveEssentials/Scripts/CloudSaveEssentialsWrapper_Starter.cs

また、ヘルパー関数と変数を含むモデルクラスが以下のファイルで定義されています:

  • C# ファイル: Assets/Resources/Modules/Storage/CloudSaveEssentials/Scripts/CloudSaveEssentialsModels.cs

CloudSaveEssentialsWrapper_Starter クラスには、いくつかの事前定義されたコンポーネントが含まれています:

  • AGS Game SDK インターフェースを参照するヘルパー変数。これらの変数は、ラッパーが初期化されるときに割り当てられます:

    private CloudSave cloudSave;
    private Lobby lobby;

    private void Start()
    {
    cloudSave = AccelByteSDK.GetClientRegistry().GetApi().GetCloudSave();
    lobby = AccelByteSDK.GetClientRegistry().GetApi().GetLobby();
    }

CloudSaveEssentialsModels クラスには、以下のヘルパーが含まれています:

  • AGS クラウドセーブにデータを保存するために使用されるレコードキーとアイテム名の定数:

    public class CloudSaveEssentialsModels
    {
    public const string GameOptionsRecordKey = "GameOptions-Sound";
    public const string MusicVolumeItemName = "musicvolume";
    public const string SfxVolumeItemName = "sfxvolume";
    }

AGS Game SDK でクラウドセーブを実装する

このセクションでは、AGS Game SDK を使用してプレイヤーレコードを保存、取得、削除するクラウドセーブを実装します。

  1. CloudSaveEssentialsWrapper_Starter クラスを開きます。まず、レコードを保存する関数を作成します。以下の関数をクラスに追加します。この関数は、レコードキーと値を提供してレコードを保存するリクエストを送信します。リクエストが完了すると、コールバック関数を呼び出します。

    public void SaveUserRecord(string recordKey, Dictionary<string, object> recordRequest, ResultCallback resultCallback)
    {
    cloudSave.SaveUserRecord(
    recordKey,
    recordRequest,
    result => OnSaveUserRecordCompleted(result, resultCallback),
    true
    );
    }
  2. 次に、保存操作の結果を処理するコールバック関数を作成します。この関数は、リクエストが成功したか失敗したかを単純にログに記録します。

    private void OnSaveUserRecordCompleted(Result result, ResultCallback customCallback = null)
    {
    if (!result.IsError)
    {
    BytewarsLogger.Log("Save Player Record from Client successful.");
    }
    else
    {
    BytewarsLogger.LogWarning($"Save Player Record from Client failed. Message: {result.Error.Message}");
    }

    customCallback?.Invoke(result);
    }
  3. 次に、レコード値を取得する新しい関数を作成します。この関数は、レコードキーを提供してレコードを取得するリクエストを送信します。リクエストが完了すると、コールバック関数を呼び出します。

    public void GetUserRecord(string recordKey, ResultCallback<UserRecord> resultCallback)
    {
    cloudSave.GetUserRecord(
    recordKey,
    result => OnGetUserRecordCompleted(result, resultCallback)
    );
    }
  4. 次に、取得操作の結果を処理するコールバック関数を作成します。この関数は、リクエストが成功したか失敗したかをログに記録します。

    private void OnGetUserRecordCompleted(Result<UserRecord> result, ResultCallback<UserRecord> customCallback = null)
    {
    if (!result.IsError)
    {
    BytewarsLogger.Log("Get Player Record from Client successful.");
    }
    else
    {
    BytewarsLogger.LogWarning($"Get Player Record from Client failed. Message: {result.Error.Message}");
    }

    customCallback?.Invoke(result);
    }
  5. レコードを削除する新しい関数を作成します。この関数は、レコードキーを提供してレコードを削除するリクエストを送信します。リクエストが完了すると、コールバック関数を呼び出します。

    public void DeleteUserRecord(string recordKey, ResultCallback resultCallback)
    {
    cloudSave.DeleteUserRecord(
    recordKey,
    result => OnDeleteUserRecordCompleted(result, resultCallback)
    );
    }
  6. 最後に、削除操作の結果を処理するコールバック関数を作成します。この関数は、リクエストが成功したか失敗したかをログに記録します。

    private void OnDeleteUserRecordCompleted(Result result, ResultCallback customCallback = null)
    {
    if (!result.IsError)
    {
    BytewarsLogger.Log("Delete Player Record from Client successful.");
    }
    else
    {
    BytewarsLogger.LogWarning($"Delete Player Record from Client failed. Message: {result.Error.Message}");
    }

    customCallback?.Invoke(result);
    }

リソース