ユースケースサンプル: 新規にサインアップしたプレイヤーのデフォルト設定値での初期化

ユースケースサンプルは、Triggers を使用して、新しいプレイヤーが最初にサインアップしたときに Cloud Save のデフォルトの健全性とスタミナ値で初期化する方法を示します。Authentication サービス によって発行される signedUp イベントを使用し、値を Cloud Save に保存します。

前提条件

最初に、必要なアクセスロールでサービスアカウントを作成し、UGS CLI を設定する必要があります。

サービスアカウントを使用した認証

Triggers サービスを呼び出す前に、サービスアカウントを使用して認証を使用する必要があります。

  1. Unity Dashboard Admin Portal に移動します。
  2. Service Accounts (サービスアカウント) を選択します。
  3. Create Service Account (サービスアカウントの作成) を選択し、サービスアカウントの名前を入力します。
  4. Create (作成) を選択します。
  5. Add project role (プロジェクトロールの追加) を選択します。
  6. 以下のロールをサービスアカウントに追加します。
    • Triggers 設定編集者
    • Triggers 設定閲覧者
    • Unity 環境閲覧者
  7. Create Key (キーの作成) を選択してキーを作成します。
  8. base64 エンコードを使用して Key ID (キー ID) と Secret Key (秘密鍵) をエンコードします。形式は "key_id:secret_key" です。この値をメモしておきます。

詳細については、Authentication を参照してください。

UGS CLI の設定

以下のステップに従って、UGS CLI の使用を準備します。

  1. UGS CLI をインストール します。

  2. プロジェクト ID と環境を以下のように設定します。
    ugs config set project-id <your-project-id>
    ugs config set environment-name <your-environment-name>

  3. 前に作成したサービスアカウントを使用して認証します。認証の取得 を参照してください。

signed-up イベントを調べる

Authentication サービスは、プレイヤーが作成されたときに signed-up イベントを発行します。イベントペイロードは以下のようになります。

{
  "playerId": "string",
  "providerId": "string",
  "createdAt": "string"
}

イベントペイロードは、パラメーターとして Cloud Code に渡されます。

詳細については、認証: サインアップ を参照してください。

Cloud Code の設定

Cloud Save を呼び出すモジュールエンドポイントまたはスクリプトを定義して、新規に認証されたプレイヤーをデフォルトの健全性およびスタミナ値で初期化します。

Cloud Code C# モジュール

以下のようなコンテンツで必須の文字列引数 playerId を設定して、InitializeNewPlayer モジュール関数を作成します。

C#

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Unity.Services.CloudCode.Core;
using Unity.Services.CloudCode.Apis;
using Unity.Services.CloudCode.Shared;
using Unity.Services.CloudSave.Model;

public class ModuleSample
{
    private const string HealthKey = "HEALTH";
    private const string StaminaKey = "STAMINA";
    private const int DefaultValue = 100;

    private readonly ILogger<ModuleSample> _logger;
    public ModuleSample(ILogger<ModuleSample> logger)
    {
        _logger = logger;
    }

    [CloudCodeFunction("InitializeNewPlayer")]
    public async Task InitializeNewPlayer(IExecutionContext ctx, IGameApiClient gameApiClient, string playerId)
    {
        try
        {
            var response = await gameApiClient.CloudSaveData.GetItemsAsync(ctx, ctx.ServiceToken, ctx.ProjectId, playerId, new List<string>() { HealthKey, StaminaKey });
            if (response.Data.Results.Count == 0)
            {
                await gameApiClient.CloudSaveData.SetItemBatchAsync(ctx, ctx.ServiceToken, ctx.ProjectId, playerId,
                    new SetItemBatchBody(new List<SetItemBody>{new (HealthKey, DefaultValue), new (StaminaKey, DefaultValue)}));

                _logger.LogInformation("The player has been initialized with the {HealthKey} and {StaminaKey} keys with values of {DefaultValue}", HealthKey, StaminaKey, DefaultValue);

            }
        } catch (ApiException e)
        {
            _logger.LogError("Failed to initialize player data in Cloud Save. Error: {Error}", e.Message);
            throw new Exception($"Failed to initialize {playerId} data in Cloud Save. Error: {e.Message}");
        }
    }

    public class ModuleConfig : ICloudCodeSetup
    {
        public void Setup(ICloudCodeConfig config)
        {
            config.Dependencies.AddSingleton(GameApiClient.Create());
        }
    }

}

モジュールをデプロイします。

モジュールのデプロイ方法を学習するには、Hello World のデプロイ を参照してください。

ノート: UGS CLI を使用してモジュールをデプロイする場合は、Cloud Code Editor の追加のサービスアカウントロールを忘れずに追加してください。

Cloud Code JavaScript スクリプト

以下のようなコンテンツで必須の文字列引数 playerId を設定して、InitializeNewPlayer スクリプトを作成します。

JavaScript

const { DataApi } = require("@unity-services/cloud-save-1.3");

const CLOUD_SAVE_HEALTH_KEY = 'HEALTH';
const CLOUD_SAVE_STAMINA_KEY = 'STAMINA';
const DEFAULT_VALUE = 100;

module.exports = async ({ params, context, logger }) => {
  const cloudSaveApi = new DataApi(context);

  try {
    // Check if player has been initialized yet
    const cloudSaveGetResponse = await cloudSaveApi.getItems(context.projectId, params.playerId, [
      CLOUD_SAVE_HEALTH_KEY, CLOUD_SAVE_STAMINA_KEY
    ]);

    if (cloudSaveGetResponse.data.results.length === 0) {
      // Record new values for player
      await cloudSaveApi.setItemBatch(context.projectId, params.playerId, {
        data: [{
          key: CLOUD_SAVE_HEALTH_KEY,
          value: DEFAULT_VALUE,
        },
          {
            key: CLOUD_SAVE_STAMINA_KEY,
            value: DEFAULT_VALUE,
          },
        ]
      });

      logger.info(`The player has been initialized with the ${CLOUD_SAVE_HEALTH_KEY} and ${CLOUD_SAVE_STAMINA_KEY} keys with values of ${DEFAULT_VALUE}`, { "affectedPlayerId": params.playerId });
      return;
    }

    logger.info("The player has already been initialized.", { "affectedPlayerId": params.playerId });
  } catch (error) {
    logger.error("Failed to update Cloud Save data", { "error.message": err.message }, { "affectedPlayerId": params.playerId });
    throw error;
  }
};

スクリプトを公開します。

スクリプトのデプロイ方法を学習するには、Hello World のデプロイ を参照してください。

ノート: UGS CLI を使用してスクリプトをデプロイする場合は、追加のサービスアカウントロール (Cloud Code Script PublisherCloud Code Editor) を忘れずに追加してください。

トリガーの設定

Cloud Code リソースを Authentication signed-up イベントに接続するには、トリガーを作成します。トリガーは、イベントが発生したとき、例えば新しいプレイヤーがサインアップするたびに、Cloud Code スクリプトまたはモジュールを実行します。

Cloud Code スクリプトを作成した場合は、以下の設定で triggers-config.tr ファイルを作成します。

{
  "Configs": [
    {
      "Name": "initialize-new-player",
      "EventType": "com.unity.services.player-auth.signed-up.v1",
      "ActionUrn": "urn:ugs:cloud-code:InitializeNewPlayer",
      "ActionType": "cloud-code"
    }
  ]
}

Cloud Code モジュールを作成した場合は、以下の設定で triggers-config.tr ファイルを作成します。

{
  "Configs": [
    {
      "Name": "initialize-new-player",
      "EventType": "com.unity.services.player-auth.signed-up.v1",
      "ActionUrn": "urn:ugs:cloud-code:ModuleSample/InitializeNewPlayer",
      "ActionType": "cloud-code"
    }
  ]
}

UGS CLI ツールを使用して設定をデプロイします。

ugs deploy triggers-config.tr

以下のようなレスポンスが表示されます。

Deployed:
    triggers-config.tr

これで、プレイヤーがサインアップしたときに Cloud Code スクリプトまたはモジュールを実行するトリガーが設定されました。

結果の検証

結果を検証するには、Authentication サービス を使用して新しいプレイヤーをサインアップします。これは、プレイヤーとして認証された任意の Unity ゲーミングサービスを呼び出すことで行うことができます。例えば、Unity Dashboard の Cloud Code スクリプトページを通じて新しいプレイヤー ID を生成することにより、プレイヤー認証フローをトリガーできます。

signed-up イベントを発生させるようにトリガーが設定されている場合、新しいプレイヤーがサインアップするたびに、それらの値が Cloud Save で初期化されます。

  1. Unity Dashboard に移動します。
  2. LiveOps > Player Management を選択します。
  3. リストからプレイヤーの 1 人を選択します。
  4. Cloud Save > Data (データ) タブに移動します。
  5. HEALTH および STAMINA キーが初期値の 100 とともに表示されます。