> ## 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="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** 以將事件儲存在您的沙箱中。

## 設計統計資料規則

既然我們已定義了玩家體驗，就可以開始建立實作這些體驗的統計資料規則。由於我們在三個案例 (精選統計資料、成就與排行榜) 中都使用 `LapTime`，因此會先設定它。

此統計資料會顯示為精選統計資料 (也稱為主打統計資料)，同時也會用於附帶額外中繼資料的全域排行榜。

當遊戲中發生特定動作時，遊戲會引發遊戲內事件，這些事件被視為建立統計資料的原始資料。每個事件都應該至少建立或更新一個統計資料。
(如需在單一事件中產生多個統計資料的詳細資訊，請參閱[事件型統計資料概觀](/zh-TW/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="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 中稱為主打統計資料)。

1. 在 Partner Center 的左窗格中，選取 **Test Sandbox** > **Service Configuration** > **Hero Stats**。

2. 選取 **New** 以新增精選/主打統計資料。

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 主打統計資料的螢幕擷取畫面。" width="462" height="422" data-path="images/gdk/services/FastestLapHeroStat-XDP.png" />

9. 選取 **Add New 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. 上傳一個 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="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 點玩家分數。在 **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 服務將用來更新玩家案例的 `LapCompleted` 事件，就需要在遊戲中新增程式碼，以便在玩家於遊戲中完成一圈賽車時傳送該事件。

若要寫入事件，請以 `LapCompleted` 作為事件名稱呼叫 [XblEventsWriteInGameEvent](/zh-TW/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})"
    );
```

## 另請參閱

[事件概觀](/zh-TW/services/xbox-services/player-data/stats-leaderboards/event-based/events/live-game-events)


## Related topics

- [事件型統計資料與排行榜入口網站設定](/zh-TW/services/xbox-services/player-data/stats-leaderboards/event-based/config/live-statslb-eb-config-nav.md)
- [設定](/zh-TW/services/xbox-services/player-data/stats-leaderboards/event-based/config/index.md)
- [事件型統計資料與遊戲管理型統計資料](/zh-TW/services/xbox-services/player-data/stats-leaderboards/live-stats-eb-vs-tm.md)
- [事件型統計資料概觀](/zh-TW/services/xbox-services/player-data/stats-leaderboards/event-based/live-stats-eb-overview.md)
- [取得事件型統計資料](/zh-TW/services/xbox-services/player-data/stats-leaderboards/event-based/how-to/live-getting-eb-stat.md)
