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

# 使用玩家統計資料

> 了解如何以索引鍵值組的形式建立、更新及查詢 PlayFab 玩家統計資料，以及如何在 Game Manager 中設定用戶端與伺服器權限。

本教學課程說明如何建立和使用玩家統計資料。玩家統計資料會儲存為索引鍵值組 (KVP)，其中索引鍵是字串，而值是 32 位元整數 (以便與不支援 64 位元的語言相容)。

排行榜也會使用玩家統計資料，但本指南僅涵蓋玩家統計資料。如果您想了解玩家統計資料與排行榜如何*一起*運作，請閱讀我們的教學課程[使用可重設的統計資料與排行榜](/zh-TW/services/playfab/community/leaderboards/tournaments-leaderboards/using-resettable-statistics-and-leaderboards)。

<Note>
  在某些文件和 API 呼叫中，您可能會看到 **UserStatistics** 一詞。在本討論中，*使用者*與*玩家*這兩個詞是相同且可互換的。在 **Game Manager** 頁面中，**Players** 索引標籤可讓您存取遊戲的 **Users/Players**，以及其中的統計資料。玩家統計資料特別指繫結至玩家的資訊，而不是關於玩家的分析資訊。
</Note>

## 用戶端 API

用戶端具有讀取玩家統計資料的存取權，但為了防止作弊，用戶端預設無法更新統計資料。

若要啟用此功能：

* [登入 PlayFab](https://developer.playfab.com/en-us/my-games)
* 選取您的 **Title**。
* 從左側功能表選取 **Settings**。
* 選取 **API Features** 索引標籤。
* 找到並啟用 **Allow client to post player statistics**。

<Note>
  這麼做會停用遊戲的一層安全性，讓玩家可以將任意分數張貼到他們所有的統計資料。如果您的遊戲有*任何*競技遊玩的層面，我們建議您*絕不*從用戶端張貼統計資料。
</Note>

## 統計資料是公開資訊

沒有私人或僅限伺服器的統計資料。玩家一律可以透過 [GetPlayerStatistics](xref:titleid.playfabapi.com.client.playerdatamanagement.getplayerstatistics) 讀取自己的所有統計資料，也可以透過排行榜 API 呼叫讀取所有其他玩家的統計資料。即使您*沒有*在遊戲中顯示統計資料或使用排行榜，情況也是如此。

唯一的例外是您透過我們的 [API 存取原則](/zh-TW/services/playfab/api-references/api-access-policy)停用用戶端功能。如需如何使用遊戲原則設定的詳細資訊，請參閱該連結，因為這是本教學課程未涵蓋的進階主題。

## 設定統計資料

下列 Unity/C# 程式碼會為玩家建立 (如果已存在則更新) *力量統計資料*值。

```csharp theme={null}
PlayFabClientAPI.UpdatePlayerStatistics( new UpdatePlayerStatisticsRequest {
    // request.Statistics is a list, so multiple StatisticUpdate objects can be defined if required.
    Statistics = new List<StatisticUpdate> {
        new StatisticUpdate { StatisticName = "strength", Value = 18 },
    }
},
result => { Debug.Log("User statistics updated"); },
error => { Debug.LogError(error.GenerateErrorReport()); });
```

## 取得統計資料

下列 Unity/C# 程式碼會擷取玩家目前所有的統計值。

```csharp theme={null}
void GetStatistics()
{
    PlayFabClientAPI.GetPlayerStatistics(
        new GetPlayerStatisticsRequest(),
        OnGetStatistics,
        error => Debug.LogError(error.GenerateErrorReport())
    );
}

void OnGetStatistics(GetPlayerStatisticsResult result)
{
    Debug.Log("Received the following Statistics:");
    foreach (var eachStat in result.Statistics)
        Debug.Log("Statistic (" + eachStat.StatisticName + "): " + eachStat.Value);
}
```

## 彙總方法

PlayFab 支援一些方便的統計資料彙總選項。這四個選項包括：

* **Last**
* **Min**
* **Max**
* **Sum**

您可以透過 [CreatePlayerStatisticDefinition](xref:titleid.playfabapi.com.admin.playerdatamanagement.createplayerstatisticdefinition) API 呼叫建立統計資料定義，但這並非必要。任何更新遊戲玩家統計資料的呼叫，都會使用 Last 彙總方法*自動*建立預設的統計資料定義。

若要變更統計資料彙總方法，您可以使用 Game Manager 或 [UpdatePlayerStatisticDefinition](xref:titleid.playfabapi.com.admin.playerdatamanagement.updateplayerstatisticdefinition) API 呼叫。

若要在 **Game Manager** 中編輯統計資料定義：

* 登入 [PlayFab](https://developer.playfab.com/en-us/my-games)

* 選取您的 **Title**。

* 從左側功能表選取 **Leaderboards** (**Statistics** 與 **Leaderboards** 密切相關)。

* 選取您要修改的現有統計資料，或者 -

* 選取 **New Leaderboard** 按鈕。
  * 若是現有的統計資料，您會看到另一個頁面，其中有 **Edit Leaderboard** 按鈕。

* 此時，您應該會看到如下所示的頁面。

  <img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/player-progression/player-data/tutorials/playfab-edit-leaderboard-stat-aggregation.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=5a2df0b42ab1f848705b3bac3b2633d8" alt="PlayFab 排行榜 - 編輯排行榜 - 統計資料彙總" width="1280" height="900" data-path="images/playfab/player-progression/player-data/tutorials/playfab-edit-leaderboard-stat-aggregation.png" />

統計資料彙總的一些使用範例：

* **Max** 和 **Min** 可用來儲存**最佳/最差**分數，例如爆頭數或命中率：
  * 簡而言之，它們套用以下規則：**如果這個值高於 (或低於) 現有分數，就更新分數**。
  * 在工作階段結束時張貼統計資料，**Min/Max Aggregation** 會負責判斷是否要更新。
  * 這些對於[可重設的排行榜](/zh-TW/services/playfab/community/leaderboards/tournaments-leaderboards/using-resettable-statistics-and-leaderboards)以及授予成就的 [PlayStream 規則](https://playfab.com/introducing-playstream/)非常有用。

* **Sum** 可用來儲存經驗值：
  * 您張貼這場戰鬥獲得的經驗值，它會加到玩家現有的統計值中。

* **Last** 可讓您自行管理統計資料：
  * 每次張貼統計資料時，都會使用最新的值。

## 排行榜

PlayFab 中儲存的所有統計資料都會產生排行榜。存取特定統計資料的排行榜是選擇性的。

重設頻率與彙總方法對遊戲中排行榜的動態程度扮演重要角色。**Tournaments** 功能著重於具有自動重設頻率的排行榜，相關說明請參閱教學課程[使用可重設的統計資料與排行榜](/zh-TW/services/playfab/community/leaderboards/tournaments-leaderboards/using-resettable-statistics-and-leaderboards)。

我們鼓勵您以與遊戲相關的各種方式使用統計資料。您可以同時使用可重設的統計資料來舉辦每日錦標賽，以及使用經驗值之類的長期統計資料。


## Related topics

- [事件型挑戰的入口網站設定](/zh-TW/services/xbox-services/player-data/achievements/event-based/config/live-challenges-eb-portal.md)
- [Rich Presence 的最佳做法](/zh-TW/services/xbox-services/community/presence/concepts/live-presence-best-practices.md)
- [註冊玩家統計資料變更通知](/zh-TW/services/xbox-services/fundamentals/rta/concepts/live-register-for-stat-notifications.md)
- [取得玩家統計資料](/zh-TW/services/playfab/api-references/rest/server/player-data-management/get-player-statistics.md)
- [更新玩家統計資料](/zh-TW/services/playfab/api-references/rest/server/player-data-management/update-player-statistics.md)
