> ## 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 ビットをサポートしていない言語との互換性のため)。

プレイヤー統計はリーダーボードでも使用されますが、このガイドではプレイヤー統計のみを取り上げます。プレイヤー統計とリーダーボードが *どのように連携して* 動作するかを知りたい場合は、[リセット可能な統計とリーダーボードの使用](/services/playfab/community/leaderboards/tournaments-leaderboards/using-resettable-statistics-and-leaderboards) チュートリアルを参照してください。

<Note>
  一部のドキュメントや API 呼び出しでは、**UserStatistics** という用語が使用されている場合があります。この議論の目的においては、*user* と *player* という用語は同一であり、互換的に使用できます。**Game Manager** ページでは、**Players** タブからタイトルの **Users/Players** にアクセスでき、その中で統計にアクセスできます。プレイヤー統計は、プレイヤーに関する分析情報ではなく、プレイヤーに紐付けられた情報を指します。
</Note>

## クライアント API

クライアントはプレイヤー統計を読み取ることができますが、不正行為を防ぐため、デフォルトでは統計を更新できません。

これを有効にするには:

* [PlayFab にログイン](https://developer.playfab.com/en-us/my-games) します。
* **タイトル** を選択します。
* 左メニューから **Settings** を選択します。
* **API Features** タブを選択します。
* **Allow client to post player statistics** を見つけて有効にします。

<Note>
  これを行うと、タイトルのセキュリティ レイヤーが無効になり、プレイヤーが任意のスコアをすべての統計に投稿できるようになります。ゲームに *何らかの* 競争的なプレイ要素がある場合は、クライアントから統計を投稿し *ない* ことを強く推奨します。
</Note>

## 統計は公開情報です

プライベートまたはサーバー専用の統計は存在しません。プレイヤーは常に [GetPlayerStatistics](xref:titleid.playfabapi.com.client.playerdatamanagement.getplayerstatistics) を介して自分のすべての統計を読み取ることができ、リーダーボード API 呼び出しを介して他のすべてのプレイヤーの統計を読み取ることができます。これは、ゲーム内で統計を表示 *しない* 場合や、リーダーボードを使用しない場合でも当てはまります。

唯一の例外は、[API Access Policy](/services/playfab/api-references/api-access-policy) を介してクライアント機能を無効にする場合です。タイトルのポリシー設定の使用方法の詳細については、そのリンクを参照してください。これは高度なトピックであり、このチュートリアルでは扱いません。

## 統計の設定

次の Unity/C# コードは、プレイヤーの *strength 統計* 値を作成 (既に存在する場合は更新) します。

```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 は、統計の集計にいくつかの便利なオプションをサポートしています。4 つのオプションは次のとおりです:

* **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) にログインします。

* **タイトル** を選択します。

* 左のメニューから **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 Leaderboards - Edit Leaderboard - Stat aggregation" width="1280" height="900" data-path="images/playfab/player-progression/player-data/tutorials/playfab-edit-leaderboard-stat-aggregation.png" />

統計の集計を使用する例:

* **Max** と **Min** は、Headshots や Accuracy などの **最高/最悪** スコアを保存するために使用できます:
  * 要するに、次のルールを適用します: **これが既存のスコアよりも高い (または低い) 場合は、スコアを更新する**。
  * セッション終了時に統計を投稿すると、**Min/Max Aggregation** が更新するかどうかを処理します。
  * これらは、[リセット可能なリーダーボード](/services/playfab/community/leaderboards/tournaments-leaderboards/using-resettable-statistics-and-leaderboards) や、実績を付与する [PlayStream Rule](https://playfab.com/introducing-playstream/) にとって非常に便利です。

* **Sum** は経験値を保存するために使用できます:
  * このバトルで得られた経験値を投稿すると、プレイヤーの既存の統計値に加算されます。

* **Last** は自分で統計を管理できます:
  * 統計を投稿するたびに、最新の値が使用されます。

## リーダーボード

PlayFab に保存されるすべての統計に対してリーダーボードが生成されます。特定の統計のリーダーボードにアクセスするかどうかはオプションです。

リセット頻度と集計メソッドは、ゲームにおけるリーダーボードの動的性の大きな要因となります。**Tournaments** 機能は、自動リセット頻度を持つリーダーボードに焦点を当てており、[リセット可能な統計とリーダーボードの使用](/services/playfab/community/leaderboards/tournaments-leaderboards/using-resettable-statistics-and-leaderboards) チュートリアルで説明されています。

ゲームに関連するあらゆる方法で統計を使用することをお勧めします。リセット可能な統計を使用して毎日のトーナメントを実行し、経験値のような長期統計を並行して使用できます。


## Related topics

- [Configuring matchmaking queues](/ja-jp/services/playfab/multiplayer/matchmaking/config-queues.md)
- [オプション サービス](/ja-jp/build/gdk-and-engines/optional-services.md)
- [統計によってプレイヤーをランキング付けする](/ja-jp/services/playfab/community/leaderboards/leaderboards-linked-to-stats.md)
- [プレイヤーインベントリの使用](/ja-jp/services/playfab/player-progression/player-data/player-inventory.md)
- [リセット可能な統計とリーダーボードの使用](/ja-jp/services/playfab/community/leaderboards/tournaments-leaderboards/using-resettable-statistics-and-leaderboards.md)
