> ## 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

以下示例使用 Partner Center 配置 XBOX 游戏体验。

在你的公司获得为 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 服务。你的游戏的 XBOX 服务配置也称为其 *服务配置*。

请按以下步骤转到 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 服务。

## 识别并定义场景的事件

在 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="Screenshot of the Add New Event dialog in Partner Center." 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="Screenshot of the Add New Event Field dialog in Partner Center." 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="Screenshot of the newly defined LapCompleted event in Partner Center." width="347" height="644" data-path="images/gdk/services/LapCompletedEvent-XDP.png" />

10. 选择 **Save Event** 以将事件保存在你的沙盒中。

## 设计统计规则

现在我们已经定义了玩家体验，我们可以开始创建实现这些体验的统计规则。因为我们在所有三个场景（精选统计数据、成就和排行榜）中都使用 `LapTime`，所以我们将首先配置它。

此统计数据将显示为精选统计数据（也称为 Hero 统计数据），并且还将用于具有其他元数据的全球排行榜。

当游戏中发生某些操作时，游戏会触发游戏内事件，这些事件被视为创建统计数据的原始数据。每个事件应至少创建或更新一个统计数据。
（有关在单个事件中生成多个统计数据的详细信息，请参阅 [基于事件的统计数据概述](/services/xbox-services/player-data/stats-leaderboards/event-based/live-stats-eb-overview)。）

1. 在 **Events & Stat Rules** 页面上，从事件列表中选择 **LapCompleted** 事件。

2. 选择 **New**（在 **Stat Rules** 的右侧）以创建新的统计规则。它将基于所选事件。将出现 **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="Screenshot of the Add Stat Rule dialog in Partner Center." 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="Screenshot of the Operator and Parameter selections for a stat rule in Partner Center." 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="Screenshot of the FastestLap stat rule with metadata in Partner Center." width="462" height="537" data-path="images/gdk/services/FastestLapStatRule-XDP.png" />

8. 选择 **Add Stat Rule** 以创建统计规则。

## 配置精选统计数据、排行榜和成就

### 精选统计数据

现在统计规则已完成，我们希望该统计数据出现在 GameHub 的成就选项卡上。因此，我们必须配置精选统计数据（在 Partner Center 中称为 Hero 统计数据）。

1. 在 Partner Center 中的左侧窗格上，选择 **Test Sandbox** > **Service Configuration** > **Hero Stats**。

2. 选择 **New** 以添加新的精选/Hero 统计数据。

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="Screenshot of the Fastest Lap hero stat in Partner Center." width="462" height="422" data-path="images/gdk/services/FastestLapHeroStat-XDP.png" />

9. 选择 **Add New Hero Stat** 以创建精选/Hero 统计数据。

### 全球排行榜

使用相同的单圈时间统计数据，我们可以配置一个排行榜，以便每个玩家都可以查看他们的单圈时间与全球所有其他玩家的排名。

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="Screenshot of the Fastest Lap leaderboard in Partner Center." 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. 上传 1920 × 1080 像素的 .png 文件以用作 **Achievement Icon**，如下所示。

   <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="Screenshot of the Add New Achievement dialog in Partner Center." width="338" height="595" data-path="images/gdk/services/Under60Achievement-XDP.png" />

7. 选择 **Add Achievement** 以创建成就。

8. 确保在成就列表中选择了 **Under 60 seconds** 成就。选择 **Rewards** 右侧的 **New**，以便向玩家提供解锁成就的奖励。

9. 因玩家解锁此成就而奖励玩家 20 个游戏得分点数。在 **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="Screenshot of the Add New Award dialog in Partner Center." 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="Screenshot of the Add New Rule dialog for an achievement in Partner Center." width="462" height="338" data-path="images/gdk/services/Under60AchievementRule-XDP.png" />

### 添加从游戏发送事件的代码

现在我们已经定义了 XBOX 服务将用于更新玩家场景的 `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

- [基于事件的统计信息与标题管理的统计信息](/zh-CN/services/xbox-services/player-data/stats-leaderboards/live-stats-eb-vs-tm.md)
- [基于事件的统计信息和排行榜门户配置](/zh-CN/services/xbox-services/player-data/stats-leaderboards/event-based/config/live-statslb-eb-config-nav.md)
- [基于事件的统计信息和排行榜](/zh-CN/services/xbox-services/player-data/stats-leaderboards/event-based/live-statslb-eb-nav.md)
- [基于事件的统计信息概述](/zh-CN/services/xbox-services/player-data/stats-leaderboards/event-based/live-stats-eb-overview.md)
- [基于事件的统计信息规则概述](/zh-CN/services/xbox-services/player-data/stats-leaderboards/event-based/config/live-user-stat-rules.md)
