ユースケースサンプル: 新規にサインアップしたプレイヤーのデフォルト設定値での初期化
ユースケースサンプルは、Triggers を使用して、新しいプレイヤーが最初にサインアップしたときに Cloud Save のデフォルトの健全性とスタミナ値で初期化する方法を示します。Authentication サービス によって発行される signedUp
イベントを使用し、値を Cloud Save に保存します。
前提条件
最初に、必要なアクセスロールでサービスアカウントを作成し、UGS CLI を設定する必要があります。
サービスアカウントを使用した認証
Triggers サービスを呼び出す前に、サービスアカウントを使用して認証を使用する必要があります。
- Unity Dashboard Admin Portal に移動します。
- Service Accounts (サービスアカウント) を選択します。
- Create Service Account (サービスアカウントの作成) を選択し、サービスアカウントの名前を入力します。
- Create (作成) を選択します。
- Add project role (プロジェクトロールの追加) を選択します。
- 以下のロールをサービスアカウントに追加します。
- Triggers 設定編集者
- Triggers 設定閲覧者
- Unity 環境閲覧者
- Triggers 設定編集者
- Create Key (キーの作成) を選択してキーを作成します。
- base64 エンコードを使用して Key ID (キー ID) と Secret Key (秘密鍵) をエンコードします。形式は "key_id:secret_key" です。この値をメモしておきます。
詳細については、Authentication を参照してください。
UGS CLI の設定
以下のステップに従って、UGS CLI の使用を準備します。
UGS CLI をインストール します。
プロジェクト ID と環境を以下のように設定します。
ugs config set project-id <your-project-id>
ugs config set environment-name <your-environment-name>
前に作成したサービスアカウントを使用して認証します。認証の取得 を参照してください。
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 Publisher
と Cloud 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 で初期化されます。
- Unity Dashboard に移動します。
- LiveOps > Player Management を選択します。
- リストからプレイヤーの 1 人を選択します。
- Cloud Save > Data (データ) タブに移動します。
HEALTH
およびSTAMINA
キーが初期値の100
とともに表示されます。