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

# Using resettable statistics and leaderboards

> Configure versioned PlayFab statistics and leaderboards that reset on set intervals, and query current or archived versions with Admin, Client, and Server APIs.

이 튜토리얼은 통계에 버전 관리를 구성하고 관리하는 방법에 대한 전체적인 안내입니다. 이 기능을 사용하면 통계와 리더보드를 *재설정*할 수 있습니다.

Admin API 메서드 사용법에 중점을 두면서, 현재 버전 및 이전 버전 모두에 대해 데이터를 쿼리하는 클라이언트 및 서버 API 메서드의 사용법도 함께 설명합니다.

이 문서의 목표는 PlayFab에서 재설정 가능한 통계가 어떻게 작동하는지에 대한 기술적 검토와 게임에서 이를 활용할 수 있는 모든 방법을 제공하는 것입니다.

## 통계와 리더보드

먼저, PlayFab의 게임에서 플레이어에 대해 정의된 모든 통계는 리더보드의 일부라는 점을 유의해야 합니다. 따라서 통계를 정의하면 리더보드도 함께 정의됩니다.

통계는 반드시 플레이어에게 보이지 않을 수도 있지만 존재합니다. 여러분이 정의한 점수를 기준으로 플레이어 목록을 가져오는 데 사용할 수 있으며, 이는 모든 점수의 상위, 하위, 현재 플레이어를 중심으로 하는 목록, 또는 사용자의 친구 목록에 있는 플레이어를 찾는 데 사용할 수 있습니다.

게임의 많은 통계는 *일생* 값을 의도합니다. 즉, 플레이어가 지속적으로 자신의 점수를 업데이트하며, 각 플레이어가 자신의 최고 기록을 갱신할 때까지 이전 값은 유지됩니다. 그러나 일부 플레이어 경험에서는 리더보드를 주기적으로 “초기화”할 수 있어야 하는 것이 중요합니다.

이는 사용자가 주어진 기간에 최상위 플레이어가 되기 위해 노력하도록 장려하거나, 오랫동안 활동하지 않은 플레이어를 순위에서 제거하는 데 사용할 수 있습니다.

이 튜토리얼에서 다룰 것처럼, PlayFab의 통계는 미리 정해진 간격으로 재설정되도록 구성할 수 있습니다.

이는 위에서 설명한 시나리오뿐만 아니라, 최근 점수의 별도 리더보드가 필요한 타이틀에도 유용합니다. 이는 예를 들어 유사한 실력 수준의 상대에게 초대장을 보낼 수 있게 하려는 게임 챌린지 같은 것에 사용할 수 있습니다.

재설정 기간을 설정한다는 것은 예를 들어 [GetLeaderboardAroundPlayer](xref:titleid.playfabapi.com.client.playerdatamanagement.getleaderboardaroundplayer) 호출로 반환되는 플레이어들이 최근에 게임을 플레이했고 로컬 플레이어와 유사한 점수를 가진 플레이어라는 것을 의미합니다.

통계를 수동 작업으로 재설정하는 것도 가능합니다. 이는 사전 출시 테스트나 알파/베타 플레이에서 확보한 데이터를 지우는 데 유용한 시스템입니다.

이는 또한 게임 코드에 버그가 도입되어 통제 불능의 점수가 나오는 최악의 상황에도 유용합니다. 각 경우에, 플레이어가 리더보드에 오를 공정한 기회가 있다고 느낄 수 있도록 리더보드를 *깨끗하게* 지울 수 있어야 합니다.

<Note>
  아래에서 볼 수 있듯, 통계를 재설정한다고 해서 해당 값이 삭제되는 것은 아닙니다. 재설정 시 PlayFab의 통계는 버전이 지정되어 새 버전이 권위 있는 버전이 되고, 이전 버전은 이후 분석을 위해 보존됩니다(또한 오래된 점수를 기반으로 플레이어에게 보상할 수 있게 합니다).
</Note>

## 재설정 가능한 통계 구성

통계의 재설정 기간은 Admin API 세트 또는 Game Manager를 사용하여 구성합니다. 이후 Game Manager, Server API 및 Client API를 통해 업데이트하고 쿼리할 수 있습니다(클라이언트에서 통계를 게시하려면 Game Manager의 게임 **Settings** -> **API Features** 탭에서 **allow client to post statistics** 옵션을 설정해야 합니다).

이에 대한 API 메서드를 설명하지만, 여기 정의된 매개 변수는 Game Manager 자체에서 사용되는 것과 동일합니다.

통계를 설정하려면 Admin `CreatePlayerStatisticDefinition` 메서드를 사용할 수 있으며, 이후 변경하려면 `UpdatePlayerStatisticDefinition` 메서드를 사용합니다.

두 경우 모두 매개 변수는 두 개뿐입니다.

* `StatisticName` - 플레이어 통계의 문자열 식별자입니다.
* `VersionChangeInterval` - 통계가 자동으로 재설정될 시점을 정의하는 기간입니다.

`VersionChangeInterval`은 이 기능의 핵심이며, hourly, daily, weekly, monthly로 정의할 수 있습니다. 나중에 통계를 정기적으로 재설정하고 싶지 않다면 never로 설정할 수도 있습니다.

다음 예에서는 `CreatePlayerStatisticDefinition` 메서드에 대한 호출이 Headshots 통계를 daily 재설정으로 설정합니다. 즉, 이 게임의 통계에 대한 리더보드는 매일 00:00 UTC에 재설정됩니다.

```csharp theme={null}
public void CreatePlayerStatisticDefinition() {
    PlayFabAdminAPI.CreatePlayerStatisticDefinition(
        new CreatePlayerStatisticDefinitionRequest() {
            StatisticName = "Headshots",
            VersionChangeInterval = StatisticResetIntervalOption.Day
        },
        result => Debug.Log("Complete"),
        error => Debug.Log(error.GenerateErrorReport())
    );
}
```

다음은 앞선 API 호출에 대한 응답입니다.

```json theme={null}
{
    "code": 200,
    "status": "OK",
    "data":
    {
        "Statistic":
        {
            "StatisticName": "Headshots",
            "CurrentVersion": 0,
            "VersionChangeInterval": "Day"
        }
    }
}
```

아래의 코드는 대체 예시입니다.

```csharp theme={null}
public void UpdatePlayerStatisticDefinition() {
    PlayFabAdminAPI.UpdatePlayerStatisticDefinition(
        new UpdatePlayerStatisticDefinitionRequest() {
            StatisticName = "Headshots",
            VersionChangeInterval = StatisticResetIntervalOption.Week
        },
        result => Debug.Log("Complete"),
        error => Debug.Log(error.GenerateErrorReport())
    );
}
```

이 호출은 통계의 재설정 기간을 weekly로 설정하는 것을 보여주며, 응답은 다음과 같습니다.

```json theme={null}
{
    "code": 200,
    "status": "OK",
    "data":
    {
        "Statistic":
        {
            "StatisticName": "Headshots",
            "CurrentVersion": 0,
            "VersionChangeInterval": "Week"
        }
    }
}
```

각 경우 결과는 다음을 포함하는 `PlayerStatisticDefinition`입니다.

* 통계의 문자열 ID(`StatisticName`).
* 통계가 재설정된 횟수(`CurrentVersion`).
* 통계가 재설정될 시점의 정의된 기간(`VersionChangeInterval`).

재설정 기간은 정의되는 즉시 적용됩니다. 따라서 이 경우 두 번째 호출은 이제 재설정이 UTC 표준 시간대의 월요일 아침 00:00 UTC(일요일 밤/월요일 아침 자정)로 정의됨을 의미하며, 이는 호출 이전의 값과 관계없이 그렇습니다.

나머지 재설정 간격도 UTC를 사용해 정의되며, Month는 매월 1일 00:00 UTC에 재설정되도록 합니다.

전체 재설정 기간 목록:

* **Never**: 시간 기반 통계 버전 관리를 중지합니다.
* **Hour**: 매 **정시**(XX:00 UTC)에 통계 버전을 지정합니다.
* **Day**: 매**일** 자정(00:00 UTC)에 통계 버전을 지정합니다.
* **Week**: 매주 월요일 자정(00:00 UTC)에 통계 버전을 지정합니다.
* **Month**: 매월 1일 자정(00:00 UTC)에 통계 버전을 지정합니다.

## 기존 통계

게임에 정의된 모든 통계는 재설정 통계로 설정되었는지 여부와 관계없이 그 정의를 쿼리할 수 있습니다.

이는 [UpdatePlayerStatistics](xref:titleid.playfabapi.com.client.playerdatamanagement.updateplayerstatistics) 호출을 사용해 통계를 만들 수 있기 때문에 유의해야 할 사항입니다. 재설정 기간(`VersionChangeInterval`)이 설정되지 않은 채 만들어진 통계는 처음에는 재설정 기간이 없으므로, 해당 통계 구성을 쿼리하면 이 매개 변수가 `Never`로 반환됩니다.

위 예시를 사용해, 타이틀에 [UpdatePlayerStatistics](xref:titleid.playfabapi.com.client.playerdatamanagement.updateplayerstatistics)를 사용해 만든(또는 Game Manager에서 플레이어에 직접 만든) `FlagsCaptured`라는 통계가 있고 몇 주가 지났다고 가정하면, 아래에 표시된 호출과 같이 나타납니다.

```csharp theme={null}
public void GetPlayerStatisticDefinitions() {
    PlayFabAdminAPI.GetPlayerStatisticDefinitions(
        new GetPlayerStatisticDefinitionsRequest(),
        result => Debug.Log("Complete"),
        error => Debug.Log(error.GenerateErrorReport())
    );
}
```

다음과 같은 결과가 나옵니다.

```json theme={null}
{
    "code": 200,
    "status": "OK",
    "data":
    {
        "Statistics": [
        {
            "StatisticName": "Headshots",
            "CurrentVersion": 2,
            "VersionChangeInterval": "Week"
        },
        {
            "StatisticName": "FlagsCaptured",
            "CurrentVersion": 0,
            "VersionChangeInterval": “Never”
        }]
    }
}
```

이 경우 `Headshots`라는 통계에는 재설정 간격이 정의되어 있으며, `CurrentVersion`은 통계가 두 번 재설정되었음을 나타냅니다.

한편 `FlagsCaptured`에는 `VersionChangeInterval`이 없으므로 `CurrentVersion`도 **0**입니다(버전이 지정된 적이 없기 때문).

[UpdatePlayerStatistics](xref:titleid.playfabapi.com.client.playerdatamanagement.updateplayerstatistics)(또는 PlayFab Game Manager)를 통해 만들어진 통계도 위에서 설명한 대로 `UpdatePlayerStatisticDefinition`을 사용해 재설정 기간을 정의할 수 있습니다.

이 작업이 완료되면 처음부터 `CreatePlayerStatisticDefinition`을 사용해 정의된 것처럼 해당 간격으로 재설정됩니다.

## 통계 수동 재설정

게임 버그로 인해 통계 부정 조작이 가능해진 경우나, 사전 출시 게임 플레이의 점수를 제거해야 하는 경우, Game Manager에서 또는 `IncrementPlayerStatisticVersion` 호출을 통해 통계를 강제로 재설정할 수 있습니다.

이는 지정된 현재 통계를 즉시 재설정하여 게임의 리더보드를 지우고 새 값을 보고할 수 있는 빈 상태를 제공합니다.

이 예시의 경우 호출은 아래와 같이 표시될 수 있습니다.

```csharp theme={null}
public void IncrementPlayerStatisticVersion() {
    PlayFabAdminAPI.IncrementPlayerStatisticVersion(
        new IncrementPlayerStatisticVersionRequest() {
            StatisticName = "Headshots"
        },
        result => Debug.Log("Complete"),
        error => Debug.Log(error.GenerateErrorReport())
    );
}
```

이는 `Headshots` 통계를 한 번 더 증가시키고, 방금 활성화된 버전에 대한 정보를 반환합니다.

```json theme={null}
{
    "code": 200,
    "status": "OK",
    "data":
    {
        "StatisticVersion":
        {
            "StatisticName": "Headshots",
            "Version": 3,
            "ActivationTime": "2016-02-03T08:02:29.864Z",
            "ArchivalStatus": "NotScheduled"
        }
    }
}
```

이 경우 `PlayerStatisticVersion` 정보가 반환되며, 통계 ID(`StatisticName`), 버전 번호, 권위 있는 버전이 된 시간(`ActivationTime`), 그리고 `ArchivalStatus`(현재 버전의 경우 항상 `NotScheduled`)를 포함합니다.

그러나 `VersionChangeInterval`도 있는 통계의 경우 수동 재설정은 다음 예약된 재설정 시간을 변경하지 *않습니다*. 예를 들어 통계가 매일 재설정되도록 예약되어 있고 UTC 오후 11:30에 수동으로 재설정되면, 자정 UTC에 *여전히* 다시 재설정됩니다.

### 재설정이 발생할 때

앞서 설명한 대로, 재설정 간격이 발생하면 통계에 버전이 지정되어 새 버전을 즉시 사용할 수 있게 되며, 해당 통계의 이전 버전은 이후 검색을 위해 보관됩니다.

재설정 간격이 발생(또는 수동 재설정이 수행)되고 통계에 버전이 지정된 후 최대 10분 동안 이전 버전에 대한 쓰기가 허용됩니다. 그 이후에는 통계가 *잠기며* 이후 업데이트가 방지됩니다.

만료되면 통계는 아카이브 프로세스로 들어가서 타이틀이 이후에 검색할 수 있습니다.

통계의 아카이브 프로세스 단계는 다음과 같습니다.

* **NotScheduled** - 통계의 아카이빙이 시작되지 않았습니다(보통 현재 활성 통계 버전에만 해당).
* **Scheduled** - 아카이브 프로세스가 예약되었지만 아직 진행되지 않았습니다.
* **InProgress** - 통계가 아카이브에 백업되고 있습니다.
* **Failed** - 예상치 못한 실패가 발생했습니다(이 경우 [지원 포럼](https://community.playfab.com/)에 문의하세요).
* **Complete** - 이 버전의 통계가 아카이빙되었습니다.

통계의 모든 과거 및 현재 버전은 `GetPlayerStatisticVersions`를 사용하여 쿼리할 수 있습니다. 이는 앞선 수동 재설정 예시에서와 같이 각 버전에 대한 정보를 반환합니다.

즉, 이 호출은 아래와 같아야 합니다.

```csharp theme={null}
public void GetPlayerStatisticVersions() {
    PlayFabAdminAPI.GetPlayerStatisticVersions(
        new GetPlayerStatisticVersionsRequest() {
            StatisticName = "Headshots"
        },
        result => Debug.Log("Complete"),
        error => Debug.Log(error.GenerateErrorReport())
    );
}
```

이는 예시 타이틀에 대해 다음 정보가 반환될 수 있습니다.

```json theme={null}
{
    "code": 200,
    "status": "OK",
    "data":
    {
        "StatisticVersions": [
        {
            "StatisticName": "Headshots",
            "Version": 0,
            "ActivationTime": "2015-01-20T05:47:27.17Z",
            "DeactivationTime": "2016-01-25T00:00:00.000Z",
            "ArchivalStatus": "Complete",
            "ArchiveDownloadUrl": {{URL}}
        },
        {
            "StatisticName": "Headshots",
            "Version": 1,
            "ActivationTime": "2016-01-25T00:00:00.000Z",
            "DeactivationTime": "2016-02-01T00:00:00.000Z",
            "ArchivalStatus": "Complete",
            "ArchiveDownloadUrl": {{URL}}
        },
        {
            "StatisticName": "Headshots",
            "Version": 2,
            "ActivationTime": "2016-02-01T00:00:00.000Z",
            "DeactivationTime": "2016-02-03T08:02:29.864Z",
            "ArchivalStatus": "InProgress"
        },
        {
            "StatisticName": "Headshots",
            "Version": 3,
            "ActivationTime": "2016-02-03T08:02:29.864Z",
            "ArchivalStatus": "NotScheduled"
        }]
    }
}
```

`IncrementPlayerStatisticVersion`에서 반환되는 값 외에도, 응답에는 현재 활성 버전 이전의 각 버전이 만료된 시간(`DeactivationTime`)과 아카이브 프로세스가 완료된 후 이전 리더보드의 전체 기록이 담긴 CSV를 다운로드할 URL(`ArchiveDownloadUrl`)도 포함됩니다.

### 통계 버전에 대한 읽기 및 쓰기

마지막으로, 서버와 클라이언트 API 측면에서 이 호출은 원래의 PlayFab 사용자 및 캐릭터 통계 호출에서 알려진 것과 매우 유사합니다.

차이점은 이제 요청 또는 응답에 버전이 포함된다는 것입니다.

통계를 검색할 때, 현재 통계 버전의 값과 버전 번호 자체가 반환됩니다.

다음 예시는 `Headshots` 통계에 대한 호출과 반환된 데이터를 보여줍니다.

#### 서버 요청

```csharp theme={null}
public void GetPlayerStatistics() {
    PlayFabServerAPI.GetPlayerStatistics(
        new GetPlayerStatisticsRequest() {
            PlayFabId= "_PlayFabId_",
            StatisticNames = new List<string>() { "Headshots" }
        },
        result => Debug.Log("Complete"),
        error => Debug.Log(error.GenerateErrorReport())
    );
}
```

#### 서버 응답

```json theme={null}
{
    "code": 200,
    "status": "OK",
    "data":
    {
        "PlayFabId": {{PlayFabId}},
        "Statistics": [
        {
            "StatisticName": "Headshots",
            "Value": 10,
            "Version": "3"
        }]
    }
}
```

#### 클라이언트 요청

```csharp theme={null}
public void GetPlayerStatistics() {
    PlayFabClientAPI.GetPlayerStatistics(
        new GetPlayerStatisticsRequest() {
            StatisticNames = new List<string>() { "Headshots" }
        },
        result => Debug.Log("Complete"),
        error => Debug.Log(error.GenerateErrorReport())
    );
}
```

#### 클라이언트 응답

```json theme={null}
{
    "code": 200,
    "status": "OK",
    "data": {
        "Statistics": [
        {
            "StatisticName": "Headshots",
            "Value": 10,
            "Version": "3"
        }]
    }
}
```

한편, `Update` 호출은 선택적 버전을 받아서, 게임 플레이 중에 버전이 증가했을 수 있는 경우 타이틀이 어떤 버전을 업데이트할지 제어할 수 있게 해줍니다.

<Note>
  이 예시에서 타이틀이 여전히 가능한 시점에 *이전* 버전에 쓰기를 수행한다면, 아래에 표시된 대로 Version 2에 쓰기를 수행하게 됩니다.
</Note>

#### 서버 요청

```csharp theme={null}
public void UpdatePlayerStatistics() {
    PlayFabServerAPI.UpdatePlayerStatistics(
        new UpdatePlayerStatisticsRequest() {
            PlayFabId= "_PlayFabId_",
            Statistics = new List<StatisticUpdate>() {
                new StatisticUpdate() {
                    StatisticName = "Headshots",
                    Version = 2,
                    Value = 10
                }
            }
        },
        result => Debug.Log("Complete"),
        error => Debug.Log(error.GenerateErrorReport())
    );
}
```

#### 서버 응답

```json theme={null}
{
    "code": 200,
    "status": "OK",
    "data": {}
}
```

#### 클라이언트 요청

```csharp theme={null}
public void UpdatePlayerStatistics() {
    PlayFabClientAPI.UpdatePlayerStatistics(
        new UpdatePlayerStatisticsRequest() {
            Statistics = new List<StatisticUpdate>() {
                new StatisticUpdate() {
                    StatisticName = "Headshots",
                    Version = 2,
                    Value = 10
                }
            }
        },
        result => Debug.Log("Complete"),
        error => Debug.Log(error.GenerateErrorReport())
    );
}
```

#### 클라이언트 응답

```json theme={null}
{
    "code": 200,
    "status": "OK",
    "data": {}
}
```

그러나 기억하세요 - 만료된 버전은 최대 10분 동안 쓸 수 있지만, 그 이후에 해당 버전에 쓰기를 시도하면 아래에 표시된 응답과 함께 실패합니다.

```json theme={null}
{
    "code": 400,
    "status": "BadRequest",
    "error": "StatisticVersionClosedForWrites",
    "errorCode": 1197,
    "errorMessage": "The statistic version is not current and is no longer accepting updates"
}
```

## 리소스

완성도를 위해 이 섹션에서는 위에서 설명한 모든 열거형, 클래스 및 API 메서드의 목록을 간단한 설명과 함께 제공합니다.

### 기본 열거형

* **Interval** - 통계(리더보드)가 재설정되는 비율의 기간:
  * **Never**
  * **Hour**
  * **Day**
  * **Week**
  * **Month**

* **StatisticVersionArchivalStatus** - 버전의 플레이어 통계 값을 다운로드 가능한 아카이브로 저장하는 프로세스의 상태:
  * **NotScheduled**
  * **Scheduled**
  * **InProgress**
  * **Failed**
  * **Complete**

### 기본 클래스와 그 멤버

* **PlayerStatisticDefinition**
  * **StatisticName** (string) - 통계의 고유 이름입니다.
  * **CurrentVersion** (string) - 통계의 현재 활성 버전으로, 통계가 재설정될 때마다 증가합니다.
  * **VersionChangeInterval** (Interval) - 모든 플레이어의 통계 값이 재설정되는 간격입니다.

* **PlayerStatisticVersion**
  * **StatisticName** (string) - 버전이 활성화되었을 때 통계의 이름입니다.
  * **Version** (string) - 통계의 버전(문자열로 인코딩된 16진수)입니다.
  * **ScheduledVersionChangeIntervalTime** (DateTime) - 구성된 **ResetInterval**을 기준으로 통계 버전이 활성화될 예정 시간입니다.
  * **CreatedTime** (DateTime) - 통계 버전이 활성화된 시간입니다.
  * **ArchivalStatus** (**StatisticVersionArchivalStatus**) - 구성된 경우 이 버전의 플레이어 통계 값을 다운로드 가능한 아카이브로 저장하는 프로세스의 상태입니다.
  * **ResetInterval** (Interval) - 구성된 경우 버전 활성화를 트리거한 재설정 간격입니다.

* **StatisticValue**
  * **StatisticName** (string) - 통계의 고유 이름입니다.
  * **Value** (Int32) - 플레이어의 통계 값입니다.
  * **Version** (string) - 플레이어에 대한 기존 통계 값의 경우, 로드된 시점의 통계 버전입니다.

* **StatisticUpdate**
  * **StatisticName** (string) - 통계의 고유 이름입니다.
  * **Version** (string) - 플레이어의 통계 값 업데이트의 경우, 업데이트할 통계의 버전입니다.
  * Value (Int32) - 플레이어의 통계 값입니다.

### Admin API 메서드

* **CreatePlayerStatisticDefinition**
  * **CreatePlayerStatisticDefinitionRequest**
    * **Name** (string) - 최소 길이 1, 최대 길이 128 - 통계의 고유 이름입니다.
    * (**VersionChangeInterval**) (Interval) - 모든 플레이어의 통계 값이 재설정되는 간격입니다(재설정은 다음 간격 경계에서 시작됩니다).

  * **CreatePlayerStatisticDefinitionResult**
    * **Statistic** (**PlayerStatisticDefinition**) - 생성된 통계 정의입니다.

* **UpdatePlayerStatisticDefinition**
  * **UpdatePlayerStatisticDefinitionRequest**
    * **StatisticName** (string) - 통계의 고유 이름입니다.
    * **VersionChangeInterval** (Interval) - 모든 플레이어의 통계 값이 재설정되는 간격입니다(재설정은 다음 간격 경계에서 시작됩니다).

  * **UpdatePlayerStatisticDefinitionResult**
    * **Statistic** (**PlayerStatisticDefinition**) - 생성된 통계 정의입니다.

* **GetPlayerStatisticDefinitions**
  * **GetPlayerStatisticDefinitionsRequest** (매개 변수 없음).
  * **GetPlayerStatisticDefinitionsResult**
    * **Statistics** (**PlayerStatisticDefinition\[]**) - 재설정 관련 정의 배열입니다.

* **GetPlayerStatisticVersions**
  * **GetPlayerStatisticVersionsRequest**
    * **StatisticName** (string) - 통계의 고유 이름입니다.

  * **GetPlayerStatisticVersionsResult**
    * **StatisticVersions** (**PlayerStatisticVersion\[]**) - 통계의 버전 변경 이력(모든 버전)입니다.

* **IncrementPlayerStatisticVersion**
  * **IncrementPlayerStatisticVersionRequest**
    * **StatisticName** (string) - 통계의 고유 이름입니다.

  * **IncrementPlayerStatisticVersionResult**
    * **StatisticVersion** (**PlayerStatisticVersion**) - 이 작업의 결과로 만료된 통계 버전(및 아카이브 상태)입니다.

### 클라이언트 API 메서드

* **GetPlayerStatistics**
  * **GetPlayerStatisticsRequest**
    * **StatisticNames** (string\[]) - 고유 이름으로 반환할 통계의 배열입니다.

  * **GetPlayerStatisticsResult**
    * **Statistics** (**StatisticValue\[]**) - 요청된 모든 통계에 대한 **StatisticValue** 데이터 배열입니다.

* **UpdatePlayerStatistics**
  * **UpdatePlayerStatisticsRequest**
    * **Statistics** (**StatisticUpdate\[]**) - 제공된 값으로 업데이트할 통계입니다.

  * **UpdatePlayerStatisticsResult** (매개 변수 없음).

### 서버 API 메서드

* **GetPlayerStatistics**
  * **GetPlayerStatisticsRequest**
    * **PlayFabId** (string) - 통계를 업데이트할 플레이어의 PlayFab ID입니다.
    * **StatisticNames** (string\[]) - 고유 이름으로 반환할 통계의 배열입니다.

  * **GetPlayerStatisticsResult**
    * **Statistics** (**StatisticValue\[]**) - 요청된 모든 통계에 대한 **StatisticValue** 데이터 배열입니다.

* **UpdatePlayerStatistics**
  * **UpdatePlayerStatisticsRequest**
    * **PlayFabId** (string) - 통계를 업데이트할 플레이어의 PlayFab ID입니다.
    * **Statistics** (**StatisticUpdate\[]**) - 제공된 값으로 업데이트할 통계입니다.

  * **UpdatePlayerStatisticsResult** (매개 변수 없음).


## Related topics

- [Using player statistics](/ko/services/playfab/community/leaderboards/tournaments-leaderboards/using-player-statistics.md)
- [Using Prize Tables](/ko/services/playfab/community/leaderboards/tournaments-leaderboards/using-prize-tables.md)
- [XR-003 제출용 타이틀 품질](/ko/publishing/certification/xr/xr-003.md)
- [Using the Profile for Advanced Leaderboards](/ko/services/playfab/community/leaderboards/tournaments-leaderboards/using-the-profile-for-advanced-leaderboards.md)
- [Leaderboards using Azure Functions](/ko/services/playfab/community/leaderboards/leaderboards-cloudscript.md)
