Online Services の Stats インターフェース では統計情報とデータをオンライン サービスにアップロードし、統計情報クエリを完了します。また、Stats インターフェースの機能は、Online Services のアチーブメントやリーダーボードのインターフェースなど、ユーザー ゲームプレイの統計情報に依存する他のインターフェースによっても使用されます。
API の概要
次の表は、Stats インターフェースに含まれる関数の概要です。
関数 |
説明 |
---|---|
Update |
|
|
統計情報をプラットフォームにアップロードします。 |
Query |
|
|
ユーザーの統計情報をクエリし、その結果をインターフェースにキャッシュします。 |
|
一連のユーザーの統計情報をクエリし、その結果をインターフェースにキャッシュします。 |
Get |
|
|
QueryStats または BatchQueryStats へのコール後に格納されたキャッシュ済みのユーザー統計情報を取得します。 |
Event Listening |
|
|
ユーザー統計情報の変更の結果として起動するイベント。 |
コンフィギュレーション
Stats インターフェースは、対応するプラットフォーム バックエンドまたは StatsNull
の実装を介して使用できます。Stats インターフェースを使用するには、最初に「DefaultEngine.ini
」ファイル内で Stats インターフェースを設定する必要があります。
[OnlineServices.Stats]
StatDefinitions=(Name=Stat_Use_Largest, Id=0, ModifyMethod=Largest)
StatDefinitions=(Name=Stat_Use_Smallest, Id=1, ModifyMethod=Smallest)
StatDefinitions=(Name=Stat_Use_Set, Id=2, ModifyMethod=Set)
StatDefinitions=(Name=Stat_Use_Sum, Id=3, ModifyMethod=Sum)
Stat Definitions には次のフィールドが含まれます。
Name
:統計情報の名前。UpdateStats
とQueryStats
でそれぞれ統計情報の更新とクエリに使用される名前です。
Id
:統計情報の ID。プラットフォーム ポータル内の対応する設定済み統計情報 ID です。
ModifyMethod
:統計情報の更新方法を示すメソッド。StatsNull
の実装でない場合、Modify Method はプラットフォーム ポータルで設定されます。Modify Method は、定義済みのアンロック ルールをアチーブメントが満たしているかどうかの判断にタイトル管理のアチーブメントが使用される場合に、アチーブメント インターフェースによってすべての実装で使用されます。
アチーブメントをアンロックしてリーダーボードを統計情報で更新するには、「DefaultEngine.ini
」ファイルのアチーブメントとリーダーボードの各コンフィグ セクションで、対応する統計情報を指定する必要があります。
例
このセクションには、次の操作に関するさまざまなコード サンプルが用意されています。
統計情報のクエリ
UE::Online::IOnlineServicesPtr OnlineServices = UE::Online::GetServices();
UE::Online::IStatsPtr Stats = OnlineServices->GetStatsInterface();
UE::Online::FQueryStats::Params Params;
Params.LocalAccountId = LocalAccountId;
Params.TargetAccountId = TargetAccountId;
Params.StatNames = {"StatA", "StatB"};
// See Note below Walkthrough for more information about this OnComplete call
Stats->QueryStats(MoveTemp(Params)).OnComplete([](const UE::Online::TOnlineResult<FQueryStats>& Result)
{
if (Result.IsError())
{
const UE::Online::FOnlineError OnlineError = Result.GetErrorValue();
// Process OnlineError
return;
}
const UE::Online::FQueryStats::Result QueriedStats = Result.GetOkValue();
// Process QueriedStats
});
ウォークスルー
デフォルトのオンライン サービスを使用します。これには、次のようにパラメータを指定することなく
GetServices
を呼び出します。UE::Online::IOnlineServicesPtr OnlineServices = UE::Online::GetServices();
デフォルトのオンライン サービスの Stats インターフェースにアクセスします。
UE::Online::IStatsPtr Stats = OnlineServices->GetStatsInterface();
TargetAccountId
のStatNames
のクエリに必要なパラメータをインスタンス化します。UE::Online::FQueryStats::Params Params; Params.LocalAccountId = LocalAccountId; Params.TargetAccountId = TargetAccountId; Params.StatNames = {"StatA", "StatB"};
エラーまたはクエリされた統計情報を処理することで、
QueryStats.OnComplete
コールバックを処理します。Stats->QueryStats(MoveTemp(Params)).OnComplete([](const UE::Online::TOnlineResult<FQueryStats>& Result) { if (Result.IsError()) { const UE::Online::FOnlineError OnlineError = Result.GetErrorValue(); // Process OnlineError return; } const UE::Online::FQueryStats::Result QueriedStats = Result.GetOkValue(); // Process QueriedStats });
メンバー関数にバインドするには、常に UObject から派生したクラス、または TSharedFromThis
から継承したクラスと次を優先的に使用します。
.OnComplete(this, &MyClass::OnQueryStatsComplete)
これによって CreateUObject
、CreateThreadSafeSP
、または CreateSP
が自動的に選択されます。最も安全なデリゲート作成コールが使用されます。詳細については、「Online Services の概要」ページの「コールバックの形式」セクションを参照してください。
キャッシュ済み統計情報の取得
UE::Online::IOnlineServicesPtr OnlineServices = UE::Online::GetServices();
UE::Online::IStatsPtr Stats = OnlineServices->GetStatsInterface();
UE::Online::TOnlineResult<FGetCachedStats> CachedStats = Stats->GetCachedStats({});
if (CachedStats.IsError())
{
UE::Online::FOnlineError OnlineError = CachedStats.GetErrorValue();
// Process OnlineError
return;
}
UE::Online::FGetCachedStats::Result& CachedStatsData = CachedStats.GetOkValue();
// Process CachedStatsData
ウォークスルー
デフォルトのオンライン サービスを使用します。これには、次のようにパラメータを指定することなく GetServices を呼び出して、Stats インターフェースにアクセスします。
UE::Online::IOnlineServicesPtr OnlineServices = UE::Online::GetServices(); UE::Online::IStatsPtr Stats = OnlineServices->GetStatsInterface();
Stats->GetCachedStats を使用して、Stats インターフェースを介してキャッシュ済みの統計情報を取得します。
UE::Online::TOnlineResult<UE::Online::FGetCachedStats> CachedStats = Stats->GetCachedStats({});
エラーまたはキャッシュ済みの統計情報データを処理することで、CachedStats を処理します。
if (CachedStats.IsError()) { UE::Online::FOnlineError OnlineError = CachedStats.GetErrorValue(); // Process OnlineError return; } UE::Online::FGetCachedStats::Result& CachedStatsData = CachedStats.GetOkValue(); // Process CachedStatsData
イベントのリッスン
イベントのリスニングは、同期および非同期の関数とは異なる方法で処理されます。OnStatsUpdated
イベントの結果を処理するための FOnlineEventDelegateHandle
が作成された後に、適切な破壊を確実にするために、シャットダウン コードで Unbind
を呼び出す必要があります。
ウォークスルー
クラス内で Stat インターフェースのためのイベント ハンドルを宣言します。
UE::Online::FOnlineEventDelegateHandle StatEventHandle;
init コード内でデフォルトのオンライン サービスを初期化して Stats インターフェースにアクセスし、イベントの発生時に統計情報を処理します。
UE::Online::IOnlineServicesPtr OnlineServices = UE::Online::GetServices(); UE::Online::IStatsPtr Stats = OnlineServices->GetStatsInterface(); StatEventHandle = Stats->OnStatsUpdated().Add([](const UE::Online::FStatsUpdated& StatsUpdated) { // custom logic inside this lambda });
シャットダウン コード内でイベント ハンドラのバインドを解除します。
StatEventHandle.Unbind();
コンソール コマンドの実行
コンソール コマンドで非同期インターフェースを実行するための全般的なコマンドラインの構文については、「Online Services の概要」ドキュメントを参照してください。
例
QueryStats 関数を実行するには、次のコンソール コマンドを実行します。
OnlineServices Index=0 Stats QueryStats 0 0 ["StatA", "StatB"]
このコマンドは、ゼロ番目のローカル ユーザーを対象に、デフォルトのオンライン サービスで Stats インターフェースから QueryStats
を呼び出します。上記のコマンドでは、デフォルトのオンライン サービスに対してこのユーザーの StatA
と StatB
をクエリしています。
統計情報データのリセット
開発とテスティングの際には、現在のタイトルに提供されたすべてのプレイヤー統計情報を ResetStats
関数を使ってリセットできます。ポリシーはそれぞれのオンライン サービスで異なりますが、この関数がテスティング環境外でも機能するとは想定しないでください。ResetStats
を使用するコードはシッピング ビルドから削除するか、コンパイル時のロジックを使って次のようにコードをマスクしてください。
#if !UE_BUILD_SHIPPING
// Code block with call to ResetStats
#endif
詳細情報
ヘッダ ファイル
必要に応じて「Stats.h
」ヘッダ ファイルを直接参照してください。Stats インターフェースのヘッダ ファイル「Stats.h
」は次の場所にあります。
UNREAL_ENGINE_ROOT\Engine\Plugins\Online\OnlineServices\Source\OnlineServicesInterface\Public\Online
UE のソース コードの入手方法については、「Unreal Engine のソース コードをダウンロードする」のドキュメントを参照してください。
関数パラメータおよび戻り型
関数パラメータおよび戻り型 (パラメータの渡し方、関数が戻す結果の処理など) については、「Online Services の概要」ページの「関数」セクションを参照してください。