> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# イベント ベースのステータスの初めての一瞥

> Partner Center で XBOX Live のイベントとステータスを構成した後、イベント送信とステータス更新のコードを追加する、初見のウォークスルー。

イベント ベースのステータスを使用して Partner Center で構成されているタイトルについて、このトピックでは、Partner Center でイベントとステータスを構成し、その後、タイトルにイベントを送信してステータスを更新するコードを追加する方法を示します。

## Partner Center にサインインする

以下の例では、XBOX ゲーム体験を構成するために Partner Center を使用します。

会社が XBOX 向けの製品を作成する契約を締結した後、Partner Center でコンテンツを構成します。会社が Partner Center アクセスの設定をまだ完了しておらず、ゲームを開発している場合は、Microsoft のアカウント マネージャーに連絡してください。アプリを開発している場合は、XBOX App Partner Requests ([xboxapps@microsoft.com](mailto:xboxapps@microsoft.com)) に連絡してください。ID\@XBOX プログラムで作業している場合は、ID Setup ([idsetup@microsoft.com](mailto:idsetup@microsoft.com)) に連絡してください。

ID\@XBOX プログラムでは、あらゆる規模の適格なゲーム開発者が、XBOX One (以降) でデジタル ゲームをセルフパブリッシュすることで創造性を発揮できるようにします。これにより、スタジオは成功を最大化するために必要なツールとサポートを得られます。詳細については、[https://www.xbox.com/Developers](https://www.xbox.com/Developers) を参照してください。

Partner Center にアクセスできるようになったら、Microsoft にゲームの製品グループを作成してもらう必要があります。Microsoft のアカウント マネージャーがこのプロセスを支援できます。

Microsoft がゲームの製品グループを作成した後、Partner Center を使用してゲームの XBOX services を構成します。ゲームの XBOX services 構成は、その *サービス構成* とも呼ばれます。

次の手順に従って、ゲームのイベント、ステータス、実績、およびリーダーボードを追加できる Partner Center の場所に移動します。

1. [Partner Center](https://developer.microsoft.com/dashboard/windows/overview) にアカウントでサインインします。

2. ゲームを含む、または含む予定の製品グループを選択します。

3. **Product Group** ページで、ゲームを選択するか、**Add New Product** を選択して新しいエントリを作成します。

4. 新しい製品を作成する場合、製品の名前を入力します。

5. リソース アクセスには、**Exclusive Resource Access (ERA)** を選択します。

6. ゲームの物理メディアを製造する必要があるか、それともデジタル ダウンロードのみになるかを選択します。

7. **Create Product** を選択します。

8. 左側のペインの下部で、製品が作成されたサンドボックスを展開します。

   サービス構成はサンドボックス レベルで定義されます。製品を別のサンドボックスにエクスポートする場合、サービス構成もエクスポートする必要があります。

9. サンドボックスのサブメニューで **Service Configuration** を選択します。このページを使用して、現在のサンドボックスでタイトルの XBOX services を構成します。

## シナリオのイベントを特定して定義する

Partner Center では、実現したいプレイヤー体験を実装するルールを定義する前に、それらの体験を駆動するイベントを特定して定義する必要があります。

イベント ベースのモデルでは、実績とリーダーボードはプレイヤー ステータスに基づいています。したがって、定義するステータスを見て、タイトルが送信する必要があるイベントを判断できます。

この例で定義する体験を駆動するために、レースの各ラップの終わりに送信するイベントを使用します。

このイベントを `LapCompleted` と呼びましょう。このイベントを使用して、カスタマイズされた体験を駆動します。これらの体験を駆動するために、`LapCompleted` イベントの一部として次のフィールドも定義します。

* **LapTime**: ラップの完走に要した時間 (分) を示すフィールド。

* **CarModel**: ラップの完走に使用された車のモデルを示す文字列フィールド。

* **WeatherCondition**: ラップが完走されたときのトラックの天候条件を識別する文字列フィールド。

* **TrackId**: ラップが完走されたトラックの ID。

このイベントを Partner Center で定義します。

1. Partner Center で、左側のペインで **Test Sandbox** > **Service Configuration** > **Events & Stat Rules** を選択します。

2. **New** を選択して新しいイベントを作成します。**Add New Event** ダイアログが次のように表示されます。

   <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/AddNewEvent-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=d620d2ea30f73bfb53fcebfe7356f526" alt="Partner Center の Add New Event ダイアログのスクリーンショット。" width="350" height="560" data-path="images/gdk/services/AddNewEvent-XDP.png" />

3. **Base Event** で **Base** を選択します。

4. **Event Name** に *LapCompleted* を入力します。

5. オプションで、**Description** にイベントの説明を入力します。

6. **Add Event Field** を選択します。

7. **Field Name** に *LapTime* を入力し、**Type** を **Double** に指定します (次のとおり)。

   <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/LapTimeField-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=1ed0a8c599be8bd3551ce963df1945dd" alt="Partner Center の Add New Event Field ダイアログのスクリーンショット。" width="352" height="439" data-path="images/gdk/services/LapTimeField-XDP.png" />

8. **Add Event Field** を選択します。

9. プロセスを繰り返して、次のイベント フィールドを追加します。

   * *CarModel*: **UnicodeString**

   * *WeatherCondition*: **UnicodeString**

   * *TrackId*: **Int32**

   イベントは次のスクリーンショットのようになります。

   <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/LapCompletedEvent-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=c30cfa0f508b2a7126abce03dccfda91" alt="Partner Center で新しく定義された LapCompleted イベントのスクリーンショット。" width="347" height="644" data-path="images/gdk/services/LapCompletedEvent-XDP.png" />

10. **Save Event** を選択して、サンドボックスにイベントを保存します。

## ステータス ルールの設計

プレイヤー体験を定義したので、それらの体験を実装するステータス ルールの作成を開始できます。3 つのシナリオ (注目統計、実績、リーダーボード) すべてで `LapTime` を使用しているため、まずそれを構成します。

このステータスは、注目統計 (hero stats とも呼ばれる) として表示され、追加のメタデータを持つグローバル リーダーボードにも使用されます。

ゲームは、ゲーム内で特定のアクションが発生したときにゲーム内イベントを発火し、ステータスを作成するための生データと見なされます。すべてのイベントによって少なくとも 1 つのステータスが作成または更新される必要があります。
(1 つのイベントで複数のステータスを生成する方法の詳細は、[イベント ベースのステータスの概要](/services/xbox-services/player-data/stats-leaderboards/event-based/live-stats-eb-overview) を参照してください。)

1. **Events & Stat Rules** ページで、イベントのリストから **LapCompleted** イベントを選択します。

2. **Stat Rules** の右にある **New** を選択して新しいステータス ルールを作成します。選択したイベントに基づきます。**Add Stat Rule** ダイアログが次のように表示されます。

   <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/AddNewStatRule-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=1f3c0e2cdfb3a9df22550c6a07a80d44" alt="Partner Center の Add Stat Rule ダイアログのスクリーンショット。" width="473" height="474" data-path="images/gdk/services/AddNewStatRule-XDP.png" />

3. **Stat Rule Name** に *FastestLap* を入力します。

4. このルールによって作成されるステータスに他のアプリやタイトルがアクセスできるようにしたいので、**Open read access to any title** チェックボックスをオンにします。

   ステータス ルールには、イベントがステータスを作成または更新する方法を定義するロジックがあります。最速ラップを追跡したいため、新しいラップ タイムが既存の最速ラップ タイムよりも小さい場合にのみステータス値を更新したいと考えます。

5. これを行うには、**Operator** で **Min** を、**Parameter** で **LapTime** を選択します (次のとおり)。

   <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/MinLapTime-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=93ff9ebb88b0843595386481e4ae455c" alt="Partner Center のステータス ルールの Operator と Parameter の選択のスクリーンショット。" width="465" height="470" data-path="images/gdk/services/MinLapTime-XDP.png" />

最後に、この特定のステータスに必要な追加データ (*ステータス コンテキスト* または *メタデータ* と呼ばれる) がイベントに含まれるようにする必要があります。プレイヤーの車、トラック、および天候条件です。

6. メタデータにフィールドを追加するには、**CarModel** を選択し、**Add Event Field** を選択します。

7. **WeatherCondition** および **TrackId** フィールドについてもこれを繰り返します (次のとおり)。

   <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/FastestLapStatRule-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=9d517a1980e04cff73ff42bbc058a5b9" alt="Partner Center のメタデータ付き FastestLap ステータス ルールのスクリーンショット。" width="462" height="537" data-path="images/gdk/services/FastestLapStatRule-XDP.png" />

8. **Add Stat Rule** を選択してステータス ルールを作成します。

## 注目統計、リーダーボード、および実績の構成

### 注目統計

ステータス ルールが完成したので、GameHub の GameHub Achievement タブにステータスを表示したいと考えます。したがって、注目統計 (Partner Center では hero stat と呼ばれる) を構成する必要があります。

1. Partner Center で、左側のペインで **Test Sandbox** > **Service Configuration** > **Hero Stats** を選択します。

2. **New** を選択して新しい注目/hero stat を追加します。

3. **Hero Stat Display Name** に *Fastest Lap* を入力します。

4. **Display Format** で **ShortTimespan** を選択します。**Display Units** で **Seconds** を選択します。

5. **Display Semantic** で **Best** を選択します。これは、値がステータスの最高スコアを表すことをコンパニオン アプリに示します。

6. **Select an Instance** を選択し、**Stat Instance** で **FastestLap** を選択します。これは、注目統計が `FastestLap` のステータス値に基づくことを示します。

7. **Ordinal** に *1* を入力します。これは、注目統計をリスト表示する際に、この注目統計を最初に表示することを示します。

8. **Sort Order** で **Ascending** を選択します。これは、次のように、値が低い方が値が高いよりも優れていることを示します。

   <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/FastestLapHeroStat-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=10ef730c295cc621a9489e24dab801f1" alt="Partner Center の Fastest Lap hero stat のスクリーンショット。" width="462" height="422" data-path="images/gdk/services/FastestLapHeroStat-XDP.png" />

9. **Add New Hero Stat** を選択して、注目/hero stat を作成します。

### グローバル リーダーボード

同じラップ タイム ステータスを使用して、リーダーボードを構成し、各プレイヤーが自分のラップ タイムが世界中の他のすべてのプレイヤーに対してどのようにランク付けされているかを確認できるようにします。

1. Partner Center で、左側のペインで **Test Sandbox** > **Service Configuration** > **Leaderboards** を選択します。

2. **New** を選択して新しいグローバル リーダーボードを作成します。

3. **Leaderboard ID** に *FastestLap* を入力します。

4. **Select an Instance** を選択し、先ほど作成した **FastestLap** ステータス ルールを選択し、**Add Stat Instance** を選択します。

5. **Sort** で **Ascending** を選択します (次のとおり)。この選択は、タイムが低い方が優れていることを示します。

   <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/FastestLapLeaderboard-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=397f88a12dc095812ec3f83a5da1c3ec" alt="Partner Center の Fastest Lap リーダーボードのスクリーンショット。" width="462" height="321" data-path="images/gdk/services/FastestLapLeaderboard-XDP.png" />

6. **Add New Leaderboard** を選択して新しいグローバル リーダーボードを作成します。

プレイヤー ステータスが更新されると、リーダーボードもランキングの変更を反映するように更新されます。

リーダーボードを作成する際に既存のプレイヤー ステータスがある場合、新しいリーダーボードをそれらのステータスで更新するには数時間かかることがあります。

### イベント ベースの実績

タイトル マネージド実績の使用を推奨します。ただし、まだイベント ベースの実績を使用しているタイトルについては、次のようにイベントを使用してサービス上での実績の解除を駆動できます。

**イベントを使用してイベント ベースの実績を解除するには**

1. Partner Center で、左側のペインで **Test Sandbox** > **Service Configuration** > **Achievements & Challenges** を選択します。

2. **New** を選択して新しい実績を追加します。

3. **Achievement Name** に *Under 60 seconds* を入力します。

4. **Description** に *Completed a lap in under 60 seconds* を入力します。この説明は、実績が解除されたときにプレイヤーに表示されます。

5. **Not Achieved Description** に *Complete a lap in under 60 seconds* を入力します。この説明は、実績がまだロックされているときにプレイヤーに表示されます。

6. **Achievement Icon** として使用する 1920 × 1080 ピクセルの .png ファイルを次のようにアップロードします。

   <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/Under60Achievement-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=a5b278e08b2cb2ff9659f51e309cbcf6" alt="Partner Center の Add New Achievement ダイアログのスクリーンショット。" width="338" height="595" data-path="images/gdk/services/Under60Achievement-XDP.png" />

7. **Add Achievement** を選択して実績を作成します。

8. 実績のリストで **Under 60 seconds** の実績が選択されていることを確認します。**Rewards** の右にある **New** を選択して、実績を解除したプレイヤーに報酬を与えます。

9. この実績の解除に対して 20 gamerscore ポイントをプレイヤーに与えます。**Reward Type** で **Gamerscore** を選択します。

10. **Value** に *20* を入力します (次のとおり)。

    <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/Under60AchievementReward-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=470435fd47f489a6e962741d921d6be8" alt="Partner Center の Add New Award ダイアログのスクリーンショット。" width="462" height="250" data-path="images/gdk/services/Under60AchievementReward-XDP.png" />

11. **Add Reward** を選択します。

12. 実績のリストで **Under 60 seconds** の実績がまだ選択されていることを確認します。**Rules** の右にある **New** を選択して、実績を解除する条件を定義します。

13. **Rule Name** に *Under 60 seconds rule* を入力します。この値はプレイヤーには表示されないため、任意の名前を付けることができます。

14. **Action** で **Min** を選択します。これは、選択したステータス インスタンスが閾値以下のときに実績が解除されることを示します。

15. **Threshold** に *60* を入力します。

16. **Select an Instance** を選択し、**FastestLap** ステータス ルールを選択し、**Add Stat Instance** を選択します。

17. **Add Rule** を選択して、次のように実績のルールを作成します。

    <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/Under60AchievementRule-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=09ee171845326525664f12f8e2c8d58d" alt="Partner Center の実績の Add New Rule ダイアログのスクリーンショット。" width="462" height="338" data-path="images/gdk/services/Under60AchievementRule-XDP.png" />

### ゲームからイベントを送信するコードを追加する

XBOX services がプレイヤー シナリオを更新するために使用する `LapCompleted` イベントを定義したので、プレイヤーがゲームでレース ラップを完走したときにイベントを送信するコードをゲームに追加する必要があります。

イベントを書き込むには、イベント名 `LapCompleted` で [XblEventsWriteInGameEvent](/reference/live/xsapi-c/events_c/functions/xbleventswriteingameevent) 関数を呼び出します。

**Flat C API**

```cpp theme={null}
    HRESULT hr = XblEventsWriteInGameEvent(
        xboxLiveContext,
        "LapCompleted",
        R"({"DifficultyLevelId":100, "GameplayModeId":"Adventure"})",
        R"({"LocationX":1,"LocationY":1})"
    );
```

## 関連項目

[イベントの概要](/services/xbox-services/player-data/stats-leaderboards/event-based/events/live-game-events)


## Related topics

- [イベント ベースのステータスとリーダーボードのポータル構成](/ja-jp/services/xbox-services/player-data/stats-leaderboards/event-based/config/live-statslb-eb-config-nav.md)
- [Azure Functions コンテキスト モデルを使用した PlayFab CloudScript](/ja-jp/services/playfab/live-service-management/service-gateway/automation/cloudscript-af/CloudScript-af-context.md)
- [イベント ベースの実績を有効にするためのイベントの書き込み](/ja-jp/services/xbox-services/player-data/achievements/event-based/how-to/live-writing-event-based-achievement.md)
- [イベント ベースのリーダーボードのポータル構成](/ja-jp/services/xbox-services/player-data/stats-leaderboards/event-based/config/live-eb-leaderboards-portal.md)
- [イベント ベースの実績](/ja-jp/services/xbox-services/player-data/achievements/event-based/live-achievements-eb-nav.md)
