Implementing Server Authoritative Player Statistics
Last updated on August 9, 2023
概要
サーバー主導型統計データは、マルチプレイヤー対戦型ゲームや、ゲームの 専用ゲームサーバー を運用している場合に適しています。これにより、ゲームクライアントから統計データの更新を維持するのではなく、ゲームサーバーからサーバー主導型のアクションを実行できます。
次のようなユースケース例があります。
目標
- AccelByte Unreal と Unity Server SDK を利用した主導型統計データの管理方法を理解する。
前提条件
- 統計データの設定 に精通している。
- AccelByte 管理者ポータルにアクセスできる。
- AccelByte Unreal または Unity SDK にアクセスできる。
- AccelByte 統計データ API ドキュメント にアクセスして詳細を参照できる。
サーバーからの統計データの使用
管理者ポータルで統計データを設定すると、このセクションで説明する例を利用して、サーバーから直接統計データを使用できます。
プレイヤーとゲーム全体のグローバル統計データの追跡 で説明しているように、サポートされている複数の更新手法を活用することもできます。
サーバーからの統計データの更新
サーバーからの更新機能は、クライアントと同様に動作します。プレイヤーとゲーム全体のグローバル統計データの追跡 からクライアント側の更新を確認することもできます。
Server SDK 機能を使用するには、次のスニペットを参照します。
- Unreal Engine
- Unity
Unreal Engine
FServerApiClientPtr ApiServer = FMultiRegistry::GetServerApiClient();
FString UserId = "Player User Id";
FString AdditionalKey = " Your additional key";
FAccelByteModelsUpdateUserStatItemWithStatCode UserStatItem{};
UserStatItem.StatCode = " Your stat code ";
UserStatItem.UpdateStrategy = EAccelByteStatisticUpdateStrategy::OVERRIDE;
UserStatItem.Value = 100.0f;
TArray<FAccelByteModelsUpdateUserStatItemWithStatCode> BulkUpdateUserStatItems = { UserStatItem };
ApiServer->ServerStatistic.BulkUpdateUserStatItemValue(UserId
, AdditionalKey
, BulkUpdateUserStatItems
, THandler<TArray<FAccelByteModelsUpdateUserStatItemsResponse>>::CreateLambda([](TArray<FAccelByteModelsUpdateUserStatItemsResponse> Result)
{
// Do something if BulkUpdateUserStatItemValue been successful
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)
{
// Do something if BulkUpdateUserStatItemValue has an error
}));
Unity
ServerStatistic serverStatistic = MultiRegistry.GetServerApiClient().GetStatistic();
string additionalKey = " Your additional key";
string userId = "Player User Id";
StatItemUpdate UserStatItem = new StatItemUpdate {
statCode = " Your stat code ",
updateStrategy = StatisticUpdateStrategy.OVERRIDE,
value = 100};
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}");
}
else
{
// Do something if UpdateUserStatItems been successful
}
});
サーバーからのユーザー統計データの取得
サーバーからのユーザー統計データの取得も、クライアントの場合と同様に動作します。これは、サーバーから追加のロジック、計算、処理を実装する場合に便利です。
Server SDK 機能を使用するには、次のスニペットを参照します。
- Unreal Engine
- Unity
Unreal Engine
FServerApiClientPtr ApiServer = FMultiRegistry::GetServerApiClient();
FString UserId = "Player User Id";
TArray<FString> StatCodes = { "Stat Code 1", "Stat Code 2" };
TArray<FString> Tags = { "Tag 1", "Tag 2", "Tag 3" };
ApiServer->ServerStatistic.GetUserStatItems(UserId
, StatCodes
, Tags
, THandler<FAccelByteModelsUserStatItemPagingSlicedResult>::CreateLambda([](FAccelByteModelsUserStatItemPagingSlicedResult Result)
{
// Do something if GetUserStatItems been successful
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)
{
// Do something if GetUserStatItems has an error
}));
Unity
ServerStatistic serverStatistic = MultiRegistry.GetServerApiClient().GetStatistic();
string userId = "Player User Id";
string[] statCodes = { "Stat Code 1", "Stat Code 2" };
string[] tags = { "Tag 1", "Tag 2", "Tag 3" };
serverStatistic.GetUserStatItems(userId
, statCodes
, tags
, result =>
{
if (result.IsError)
{
// Do something if GetUserStatItems an error
Debug.Log($"Error GetUserStatItems, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
}
else
{
// Do something if GetUserStatItems been successful
}
});