イベントに基づく統計の概要
イベント ベースの統計を使用してパートナー センターに構成されたタイトルの場合、このトピックでは、パートナー センターでイベントと統計を構成し、イベントを送信して統計を更新するコードをタイトルに追加する方法について説明します。
パートナー センターにサインインする
以下の例では、パートナー センターを使用して Xbox のゲーム エクスペリエンスを構成します。
会社が Xbox 用の製品を作成することに同意した後、パートナー センターでコンテンツの構成します。 会社で パートナー センター アクセスをまだ設定されていない状況でお客様がゲームを開発している場合は、Microsoft アカウント マネージャーにお問い合わせください。 アプリを開発する場合は、Xbox App Partner Requests (xboxapps@microsoft.com) にお問い合わせください。 ID@Xbox プログラムを使用している場合は、ID セットアップ (idsetup@microsoft.com) にお問い合わせください。
ID@Xbox プログラムでは、あらゆる規模の資格を持つゲーム開発者が、Xbox One (またはそれ以降) でデジタル ゲームを自己公開することで、創造性を発揮できます。 これにより、スタジオには、成功を最大化するために必要なツールとサポートが提供されます。 詳しくはhttps://www.xbox.com/Developersをご覧ください。
パートナー センターにアクセスできるようになったら、Microsoft でゲームのための製品グループを作成する必要があります。 担当の Microsoft アカウント マネージャーがこのプロセスを支援できます。
Microsoft がゲームの製品グループを作成したら、パートナー センターを使用してゲームの Xbox サービスを構成します。 ゲームのための Xbox サービス構成は、サービス コンフィグとも呼ばれます。
以下の手順で、ゲームのためにイベント、統計、実績、ランキングを追加できるパートナー センター内の場所へ移動します。
パートナー センター上で、ご自身のアカウントにサインインします。
ゲームが含まれる、または含まれる予定の製品グループを選択します。
[製品グループ] ページで、ゲームを選択するか、[新しい製品の追加] ボタンをクリックして新しいエントリを作成します。
新しい製品を作成しようとしている場合は、製品の名前を入力します。
リソースへのアクセスの場合は [排他リソース アクセス (ERA)] を選択します。
ゲームの物理メディアを作成する必要があるか、デジタル ダウンロードのみになるかを選択します。
[プロファイルの作成] を選択します。
左側のナビゲーション ペインの下側で、その中に製品が作成されたサンドボックスを展開します。
サンドボックス レベルでサービス構成が定義されています。 製品を別のサンドボックスにエクスポートする場合は、サービス構成もエクスポートする必要があります。
サンドボックス サブメニューで、[サービス コンフィグ] を選択します。 このページから、現在のサンドボックス内でタイトルのために Xbox サービスを構成します。
シナリオのイベントを特定して定義する
パートナー センターでは、実現したいプレイヤー エクスペリエンスを実装するルールを定義する前に、それらのエクスペリエンスを動かすイベントを識別し、定義する必要があります。
イベント ベースのモデルでは、実績とランキングはプレイヤーの統計に基づいています。その結果、定義する統計を見て、タイトルが送信する必要があるイベントを確認できます。
この例で定義するエクスペリエンスを強化するために、レースにおいて各ラップの終わりに送信するイベントを使用します。
このイベント LapCompleted
を呼び出しましょう。 このイベントを使用して、カスタマイズされたエクスペリエンスを促進します。 これらのエクスペリエンスを強化するために、LapCompleted
イベントの一部として次のフィールドも定義します。
LapTime: 1 ラップを完了するのにかかったタイム (分単位) を示すフィールド。
CarModel: ラップを完了するのに使用された車のモデルを示す文字列フィールド。
WeatherCondition: ラップ完了時のトラックの天候状態を識別する文字列フィールド。
TrackId: ラップが完了されたトラックの ID。
ここで、パートナー センターでこのイベントを定義します。
パートナー センターの左側のウィンドウで、[テスト サンドボックス] > [[サービス コンフィグ] > [イベントと統計ルール] の順に選択します。
[新規] を選択して新しいポリシーを作成します。 次に示すように、[新しいイベントの追加] ダイアログが表示されます。
[ベース イベント] で [ベース] を選択します。
[イベント名] に 「LapCompleted」と入力します。
必要に応じて、イベントの説明を [説明] に入力します。
[イベント フィールドの追加] を選択します。
Field Name に「LapTime」と入力します。次に、次に示すように、Type を Double として指定します。
[イベント フィールドの追加] を選択します。
手順を繰り返して以下のイベント フィールドを追加します。
CarModel: UnicodeString
WeatherCondition: UnicodeString
TrackId: Int32
イベントは次のスクリーンショットのようになります。
[イベントの保存] をクリックしてサンドボックス内のイベントを保存します。
統計ルールの設計
既にプレイヤー エクスペリエンスの定義は終えたので、それらのエクスペリエンスを実装する統計ルールの作成を開始できます。
LapTime
を 3 つのシナリオ (注目の統計、実績、ランキング) すべてに使用しているため、まずこれを構成します。
この統計は "おすすめの統計" (ヒーロー統計とも呼ばれます) として表示され、追加のメタデータと共にグローバル ランキングにも使用されます。
ゲームは、ゲーム内で特定のアクションが発生し、それが統計を作成するための生データと見なされたときにゲーム内イベントを生成します。すべてのイベントによって、少なくとも 1 つの統計が作成または更新される必要があります (1 つのイベントで複数の統計を生成する方法の詳細については、「Event ベースの統計の概要」を参照してください。)
[Events & Stat Rules] ページで、イベントの一覧から [LapCompleted] イベントを選択します。
[新規] ([統計ルール] の右側) をクリックして新しい統計ルールを作成します。 選択したイベントに基づいて作成されます。 次に示すように、[統計ルールの追加] ダイアログが表示されます。
[統計ルール名] に[FastestLap」と入力します。
他のアプリやタイトルがこのルールで作成された統計にアクセスしてもらうには、[任意のタイトルからの読み取りアクセスを有効] チェック ボックスをオンにします。
統計ルールには、イベントによってどのように統計を作成または更新するかを定義するロジックがあります。最速ラップを追跡したいため、新しいラップ タイムが既存の最速ラップ タイムより速い場合にのみ統計値を更新する必要があります。
これを行うには、次に示すように [演算子] で [分] を、[パラメーター] で LapTime] を選択します。
最後に、この特定の統計、つまりプレーヤーの車、トラックおよび気象条件に必要なすべての追加データ (stat context または metadata) がイベントに含まれていることを確認する必要があります。
メタデータにフィールドを追加するには CarModel を選択し、[イベント フィールドの追加] を選択します。
これを [WeatherCondition] フィールドと [TrackId] フィールドについて繰り返します。
[統計ルールの追加] を選択して統計ルールを作成します。
注目の統計、ランキング、および実績の構成
注目の統計
統計ルールが完了したので、GameHub の [GameHub の実績] タブに統計を表示させる必要があります。 その結果、おすすめの統計 (パートナー センターではヒーロー統計と呼ばれます) を構成する必要があります。
パートナー センターの左側のウィンドウで、 [テスト サンドボックス] > [サービス コンフィグ] > [ヒーロー統計] の順に選択します。
[新規] をクリックして新しいおすすめの統計/ヒーロー統計を追加します。
[ヒーロー統計の表示名] に「Fastest Lap」と入力します。
[フォーマットの表示] で [ShortTimespan] を選択します。 [表示ユニット] で [秒] を選択します。
[表示セマンティック] で [最適] を選択します。 これはコンパニオン アプリに、値はその統計の最高スコアを表すことを指定します。
[インスタンスを選択] を選択し、[統計インスタンス] で [FastestLap] を選択します。 これは、おすすめの統計は
FastestLap
が統計値に基づいていることを示しています。[序数] に「 1」と入力します。 これで、注目の統計の一覧作成時に、この統計を表示する必要があることを指定します。
[並べ替え順序] で [昇順] を選択します。 これは、次に示すように、低い値の方が高い値より価値があることを示しています。
[新しいヒーロー統計の追加] を選択しておすすめの/ヒーロー統計を作成します。
グローバル ランキング
同じラップ タイム統計を使用して、すべてのプレイヤーが、世界中の他のプレイヤーすべてと比較して、自分のラップ タイムがどのようなランクにあるかを確認可能なランキングを構成できます。
パートナー センターの左側のウィンドウで、[テスト サンドボックス] > [サービス コンフィグ] > [ランキング] の順に選択します。
[新規] をクリックして新しいグローバル ランキングを作成します。
[Leaderboard ID] に「FastestLap」と入力します。
[インスタンスの選択] を選択し、前に作成した [FastestLap] 統計ルールを選択して、[統計インスタンスの追加] を選択します。
次に示すように、[並べ替え] で [昇順] を選択します。 この選択は、時間が短ければ短い方がいいことを示しています。
[新しいランキングの追加] を選択して新しいグローバル ランキングを作成します。
プレイヤー統計が更新されるとランキングも更新され、ランキングに生じた変化が反映されます。
ランキングを作成するときに既存のプレイヤー統計がある場合は、これらの統計で新しいランキングを更新するのに数時間かかることがあります。
イベントに基づく実績
タイトル管理された実績を使用することをお勧めします。 ただし、イベント ベースの実績をまだ使用しているタイトルの場合は、次のようにイベントを使用して、サービス上の実績のロック解除を強化できます。
イベントを使用してイベントに基づく実績のロックを解除するには
パートナー センターの左側のウィンドウで、[テスト サンドボックス] > [サービス コンフィグ] > [実績とチャレンジ] の順に選択します。
[新規] をクリックして新しい実績を追加します。
[実績名] に「Under 60 seconds」と入力します。
[説明] には「Completed a lap in under 60 seconds」と入力します。 この説明は、実績のロックが解除されたときにプレイヤーに表示されます。
[不達成のときの説明] には「Complete a lap in under 60 seconds」と入力します。 この説明は、実績がまだロックされているときにプレイヤーに表示されます。
次に示すように、1920 × 1080 pixel .png ファイルをアップロードして実績アイコンとして機能させます。
[実績の追加] を選択して実績を作成します。
実績の一覧で [60 秒以内] の実績が選択されていることを確認します。 "Rewards" の右側にある [新規] を選択して、実績のロックを解除するためのリワードをプレイヤーに付与します。
この実績のロックを解除するために、プレーヤーに 20 ゲーマースコア ポイントを付与します。 [リワードの種類] で、[ゲームスコア] を選択します。
次に示すように、[値] に「20」と入力します。
[リワードの追加] を選択します。
実績のリストで "60 秒未満" の実績がまだ選択されていることを確認します。 [ルール] の右側にある [新規] を選択して、実績のロックを解除する条件を定義します。
[ルール名] に「Under 60 seconds」と入力します。 この値はプレイヤーには表示されないため、必要に応じて呼び出すことができます。
[アクション] で [分] を選択します。 これで、選択した統計インスタンスがしきい値以下であるときに実績のロックが解除されることを示しています。
[しきい値] に 「60」と入力します。
[インスタンスの選択] を選択し、FastestLap 統計ルールを選択して、[統計インスタンスの追加] を選択します。
次に示すように、[ルールの追加] を選択して実績のルールを作成します。
ゲームからイベントを送信するコードを追加する
これで、Xbox サービスがユーザー シナリオを更新するために使用する LapCompleted
イベントが定義されたので、プレーヤーがゲームでレース一周を完了したときにイベントを送信するためのコードをゲームに追加する必要があります。
イベントを書き込むには、LapCompleted
のイベント名を使用して XblEventsWriteInGameEvent 関数を呼び出します。
フラット C API
HRESULT hr = XblEventsWriteInGameEvent(
xboxLiveContext,
"LapCompleted",
R"({"DifficultyLevelId":100, "GameplayModeId":"Adventure"})",
R"({"LocationX":1,"LocationY":1})"
);