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

Implementing Server Authoritative Player Statistics

Last updated on April 1, 2024

概要

サーバー主導型統計データは、マルチプレイヤー対戦型ゲームや、ゲームの 専用ゲームサーバー を運用している場合に適しています。これにより、ゲームクライアントから統計データの更新を維持するのではなく、ゲームサーバーからサーバー主導型のアクションを実行できます。

次のようなユースケース例があります。

  • マッチ終了時に、専用サーバーから、ELOMMR のスコアを維持する。
  • オンライン MMO キャラクターの統計データを追跡する。

目標

  • AccelByte Unreal と Unity Server SDK を利用した主導型統計データの管理方法を理解する。

前提条件

  • 統計データの設定 に精通している。
  • AccelByte 管理者ポータルにアクセスできる。
  • AccelByte Unreal または Unity SDK にアクセスできる。
  • AccelByte 統計データ API ドキュメント にアクセスして詳細を参照できる。

サーバーからの統計データの使用

管理者ポータルで統計データを設定すると、このセクションで説明する例を利用して、サーバーから直接統計データを使用できます。

プレイヤーとゲーム全体のグローバル統計データの追跡 で説明しているように、サポートされている複数の更新手法を活用することもできます。

サーバーからの統計データの更新

サーバーからの更新機能は、クライアントと同様に動作します。プレイヤーとゲーム全体のグローバル統計データの追跡 からクライアント側の更新を確認することもできます。

Server SDK 機能を使用するには、次のスニペットを参照します。

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
}));

サーバーからのユーザー統計データの取得

サーバーからのユーザー統計データの取得も、クライアントの場合と同様に動作します。これは、サーバーから追加のロジック、計算、処理を実装する場合に便利です。

Server SDK 機能を使用するには、次のスニペットを参照します。

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
}));