ユーザー統計データに追加データを保存する
注釈:本資料はAI技術を用いて翻訳されています。
はじめに
統計データ機能を使用すると、プレイヤー関連の統計情報の追加データを保存できます。追加データは、追跡されている統計データに関する詳細を含めるために利用できます。たとえば、統計値自体と併せて、武器名、車両名、ゲームモード、その他の関連する詳細などのプレイヤーに関する一般情報を追跡するために使用できます。
このセクションでは、統計の追加データを利用する方法、更新する方法、および他のサービスとの統合について学習します。
前提条件
- AccelByte Gaming Services (AGS) 管理者ポータルへのアクセス
- 以下の権限を含む AccelByte Unreal または Unity SDK:
- クライアント ID
- クライアントシークレット
- AccelByte 統計データ API ドキュメントへのアクセス
統計の追加データ更新動作
ユーザー統計データの追加データは、2つの方法で更新できます:
-
Always: このオプションを選択すると、ゲームクライアントまたはサーバーがプレイヤー統計データを更新するたびに、すべての関連サイクルの追加データを常に置き換えます。このオプションは、表示名などのプレイヤーの一般情報を追跡するのに適しています。
この例は、表示名が変更され(Alex から Bob へ)、特定のサイクル(日次)の更新があることを示しています。すべての追加データも更新されます。
状態 全期間 週次 日次 更新前 3012 - Alex 2600 - Alex 2441 - Alex 更新後 3012 - Bob 2600 - Bob 2461 - Bob -
On Updated: このオプションを選択すると、値の変更が受け入れられた場合にのみ追加データを更新します。MIN/MAX 戦略でプレイヤー統計データを更新する場合、値が現在のユーザーのポイントよりも大きいまたは小さい場合にのみ追加データが更新されます。サポートされている更新戦略の詳細については、プレイヤーとゲームのグローバル統計データの追跡を参照してください。このオプションは、ポイントが達成されたときにプレイヤーの属性を追跡する場合に適しています。
この例は、プレイヤーが武器を Slingshot から Bow に変更し、特定のリーダーボードサイクル(日次)の新記録を達成したことを示しています。
状態 全期間 週次 日次 更新前 100 - Gun 100 - Gun 40 - Slingshot 更新後 100 - Gun 100 - Gun 90 - Bow
デフォルトでは、作成するすべての統計設定は Always update additional data オプションを使用します。このオプションは管理者ポータルで指定できます。
統計設定で追加データ更新動作を設定する
AGS 管理者ポータルで統計設定を作成および更新できます。
新しい統計設定を作成する
新しい統計設定を作成するときに追加データ更新戦略を指定するには、以下の手順に従います:
-
AGS 管理者ポータルで、ゲームの名前空間に移動します。
-
サイドバーで、Progression & Inventory > Statistics > Configuration に移動します。Statistic Configuration ページが表示されます。
-
Add Configuration ボタンをクリックします。Add New Configuration フォームが表示されます。

-
フォームの必須フィールドに入力します。このフォームのフィールドの詳細については、ユーザーおよびグローバル統計設定の作成を参照してください。
-
フォームを下にスクロールして、Advanced Configuration セクションを展開します。

-
設定に適した Always または On Updated を選択して、Additional Data Update Strategy を定義します。
-
Add ボタンをクリックして、新しい統計設定を保存します。
既存の統計設定を更新する
既存の統計設定の追加データ更新戦略を変更するには、以下の手順に従います:
-
AGS 管理者ポータルで、ゲームの名前空間に移動します。
-
サイドバーで、Progression & Inventory > Statistics > Configuration に移動します。Statistic Configuration ページが表示されます。
-
リストから、更新する統計設定を見つけます。次に、対応する View ボタンをクリックします。Configuration Details ページが表示されます。

-
Additional Data Update Strategy フィールドの鉛筆ボタンをクリックします。
-
ドロップダウンから、Always または On Updated を選択して、統計設定の追加データ更新戦略を更新します。設定が更新されます。

追加データを使用してプレイヤー統計データを更新する
ゲームクライアントとゲームサーバーからプレイヤー統計データを更新できます。
ゲームクライアントから更新
この更新機能はゲームクライアントから直接呼び出すことができ、ゲームサーバーを利用しないシングルプレイヤーやピアツーピアマルチプレイヤーなどの非競争的なジャンルに適しています。
- Unreal
- Unity
FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
FString AdditionalKey = "";
TArray<TSharedPtr<FJsonValue>> JsonArray;
JsonArray.Add(MakeShareable(new FJsonValueString("sword")));
FJsonObjectWrapper AdditionalData;
AdditionalData.JsonObject = MakeShared<FJsonObject>();
AdditionalData.JsonObject->SetStringField("characterName", "hero");
AdditionalData.JsonObject->SetArrayField("weapons", JsonArray);
FAccelByteModelsUpdateUserStatItemWithStatCode UserStatItem1{};
UserStatItem1.StatCode = " Your 2nd stat code ";
UserStatItem1.UpdateStrategy = EAccelByteStatisticUpdateStrategy::INCREMENT;
UserStatItem1.Value = 50.0f;
UserStatItem1.AdditionalData = AdditionalData;
TArray<FAccelByteModelsUpdateUserStatItemWithStatCode> BulkUpdateUserStatItems = { UserStatItem1 };
ApiClient->Statistic.BulkUpdateUserStatItemsValue(AdditionalKey
, BulkUpdateUserStatItems
, THandler<TArray<FAccelByteModelsUpdateUserStatItemsResponse>>::CreateLambda([](TArray<FAccelByteModelsUpdateUserStatItemsResponse> Result)
{
// Do something if BulkUpdateUserStatItemsValue is successful
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)
{
// Do something if BulkUpdateUserStatItemsValue has an error
}));
Statistic statistic = AccelByteSDK.GetClientRegistry().GetApi().GetStatistic();
string additionalKey = "";
StatItemUpdate userStatItem = new StatItemUpdate
{
statCode = " Your stat code ",
updateStrategy = StatisticUpdateStrategy.INCREMENT,
value = 50,
additionalData = new Dictionary<string, object>
{
{"characterName", "hero"},
{"weapons", new [] {"sword"} }
}
};
StatItemUpdate[] bulkUpdateUserStatItems = { userStatItem };
statistic.UpdateUserStatItems(additionalKey, bulkUpdateUserStatItems, result =>
{
if (result.IsError)
{
// Do something if UpdateUserStatItems an error
Debug.Log($"Error UpdateUserStatItems, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if UpdateUserStatItems is successful
});
ゲームサーバーから更新
サーバー主導型の統計データは、マルチプレイヤー競技ゲーム、またはゲーム用に専用ゲームサーバーが実行されている場合に適しています。これは、以下のケースに適用できます:
- マッチ終了時に、専用サーバーから ELO またはマッチメイキングレーティング(MMR)スコアを維持する
- オンライン MMO キャラクターの統計データを追跡する
サーバー SDK 機能を使用するには、ゲームエンジンに適したコードを使用します。
- Unreal
- Unity
FServerApiClientPtr ApiServer = AccelByteOnlineSubsystemPtr->GetServerApiClient();
FString AdditionalKey = "";
FString UserId = " Your User Id";
TArray<TSharedPtr<FJsonValue>> JsonArray;
JsonArray.Add(MakeShareable(new FJsonValueString("sword")));
FJsonObjectWrapper AdditionalData;
AdditionalData.JsonObject = MakeShared<FJsonObject>();
AdditionalData.JsonObject->SetStringField("characterName", "hero");
AdditionalData.JsonObject->SetArrayField("weapons", JsonArray);
FAccelByteModelsUpdateUserStatItemWithStatCode UserStatItem1{};
UserStatItem1.StatCode = " Your 2nd stat code ";
UserStatItem1.UpdateStrategy = EAccelByteStatisticUpdateStrategy::INCREMENT;
UserStatItem1.Value = 50.0f;
UserStatItem1.AdditionalData = AdditionalData;
TArray<FAccelByteModelsUpdateUserStatItemWithStatCode> BulkUpdateUserStatItems = { UserStatItem1 };
ApiServer->ServerStatistic.BulkUpdateUserStatItemValue(UserId
, AdditionalKey
, BulkUpdateUserStatItems
, THandler<TArray<FAccelByteModelsUpdateUserStatItemsResponse>>::CreateLambda([](TArray<FAccelByteModelsUpdateUserStatItemsResponse> Result)
{
// Do something if BulkUpdateUserStatItemValue is successful
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)
{
// Do something if BulkUpdateUserStatItemValue has an error
}));
ServerStatistic serverStatistic = AccelByteSDK.GetServerRegistry().GetApi().GetStatistic();
string additionalKey = "";
string userId = "Player User Id";
StatItemUpdate userStatItem = new StatItemUpdate
{
statCode = " Your stat code ",
updateStrategy = StatisticUpdateStrategy.OVERRIDE,
value = 100,
additionalData = new Dictionary<string, object>
{
{"characterName", "hero"},
{"weapons", new [] {"sword"} }
}
};
StatItemUpdate[] bulkUpdateUserStatItems = { userStatItem };
serverStatistic.UpdateUserStatItems(userId, additionalKey, bulkUpdateUserStatItems, result =>
{
if (result.IsError)
{
// Do something if UpdateUserStatItems an error
Debug.Log($"Error UpdateUserStatItems, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if UpdateUserStatItems is successful
});