통계를 사용하여 더 많은 작업 수행
이 자습서에서는 다중 열 통계 만들기 및 통계를 쿼리하는 여러 가지 방법과 같이 서비스에서 제공해야 하는 고급 기능을 다룹니다. 이러한 기능을 통해 통계 서비스가 수행할 수 있어야 하는 작업의 한계를 뛰어넘는 것을 목표로 합니다.
우리는 이러한 새로운 기능이 몇 가지 문제를 해결하는 데 어떻게 도움이 될 수 있는지의 예로 경쟁이 치열한 슈팅 게임을 사용하고 있습니다. 이 게임에는 플레이어가 장거리 슛을 할 수 있는 여러 무기가 있습니다. 우리는 장거리 샷의 거리뿐만 아니라 사용된 총알의 구경을 추적하려고합니다.
필수 조건
기본 통계 만들기의 단계를 완료합니다.
다중 열 통계 정의 만들기
이 예제로 시작하려면 이전보다 더 복잡한 통계 정의를 만들어야 합니다.
장거리 및 구경의 주요 측면을 매핑하기 위해 여러 열을 정의합니다. 다음 예제에서는 C# SDK를 사용하여 통계 정의를 만드는 방법을 보여줍니다.
public static async Task CreateStatisticDefinitionAsync(PlayFabAuthenticationContext context, string statName)
{
PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);
CreateStatisticDefinitionRequest statDefinitionRequest = new CreateStatisticDefinitionRequest()
{
Name = statName,
AuthenticationContext = context,
EntityType = "title_player_account",
VersionConfiguration = new VersionConfiguration()
{
MaxQueryableVersions = 1,
ResetInterval = ResetInterval.Manual,
},
Columns = new List<StatisticColumn>()
{
new StatisticColumn()
{
Name = "Distance",
AggregationMethod = StatisticAggregationMethod.Max,
},
new StatisticColumn()
{
Name = "Caliber",
AggregationMethod = StatisticAggregationMethod.Min,
}
},
};
PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createStatDefResult = await statsAPI.CreateStatisticDefinitionAsync(statDefinitionRequest);
}
여기서 Columns
가장 중요한 구성 요소는 여러 정의를 StatisticColumn
허용하여 통계가 여러 값을 가질 수 있도록 하는 매개 변수입니다. 유일한 예외는 의 집계를 사용하는 경우입니다 Sum
.
통계에 데이터 추가
이제 통계를 만들었으므로 데이터를 추가하겠습니다. 이 주제에 대한 이전 자습서와 기본 차이점은 이제 두 개의 다른 값을 추가해야 한다는 것입니다. 다음 예제에서는 C# SDK를 사용하여 통계에 데이터를 추가하는 방법을 보여줍니다.
public static async Task UpdateStatisticForPlayer(PlayFabAuthenticationContext context, string statName, string entityId, int score)
{
PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);
UpdateStatisticsRequest updateStatRequest = new UpdateStatisticsRequest()
{
Entity = new PlayFab.LeaderboardsModels.EntityKey()
{
Id = entityId,
Type = EntityType
},
AuthenticationContext = context,
Statistics = new List<PlayFab.LeaderboardsModels.StatisticUpdate>()
{
new PlayFab.LeaderboardsModels.StatisticUpdate()
{
Name = statName,
Scores = new List<string> { score.ToString(), score.ToString()},
}
}
};
PlayFabResult<UpdateStatisticsResponse> updateResult = await statsAPI.UpdateStatisticsAsync(updateStatRequest);
}
여기서 기본 지점은 Scores
추가될 통계 내의 매개 변수를 사용합니다. 코드 예제에서는 문자열인 두 개의 서로 다른 값을 볼 수 있지만 통계 내의 입력 정의일 뿐입니다. 이러한 값은 숫자로 처리됩니다. 점수 목록의 길이는 항상 통계 정의의 열 수와 일치해야 합니다.
통계에서 데이터 검색
이제 여러 엔터티를 쿼리하고 각 엔터티와 관련된 모든 통계를 가져오는 방법을 알아봅니다. 다음 예제에서는 C# SDK를 사용하여 통계에 데이터를 추가하는 방법을 보여줍니다.
public static async Task GetStatsForEntities(PlayFabAuthenticationContext context, string[] entityIds)
{
PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);
GetStatisticsForEntitiesRequest request = new GetStatisticsForEntitiesRequest()
{
AuthenticationContext = context,
Entities = entityIds.Select(entity => new PlayFab.LeaderboardsModels.EntityKey()
{
Id = entity,
Type = EntityType
}).ToList(),
};
PlayFabResult<GetStatisticsForEntitiesResponse> result = await statsAPI.GetStatisticsForEntitiesAsync(request);
foreach (EntityStatistics entityStatistics in result.Result.EntitiesStatistics)
{
Console.WriteLine("Stats for entity: " + entityStatistics.EntityKey.ToString());
foreach (var stat in entityStatistics.Statistics)
{
Console.WriteLine($"{stat.Name} : {string.Join('|', stat.Scores)}");
}
}
}
타이 브레이킹
다중 열 통계 정의가 있는 경우 동률 구분이 필요한 시나리오를 접할 수 있습니다. 이 메커니즘이 작동하는 방식은 열이 추가된 방식을 따르는 것입니다. 새 값이 들어올 때마다 시스템은 첫 번째 열에 대한 집계 조건을 충족하는지 확인합니다. 값이 같으면 두 번째 콜럼에 대한 조건을 확인합니다. 이 동작은 다음 열에 대해 계속됩니다.
예를 들어 다음 세 개의 열에 대한 통계를 사용할 수 있습니다.
- 첫 번째 열에는 최소 집계가 있습니다.
- 두 번째 열에는 최대 집계가 있습니다.
- 세 번째 열에는 마지막 집계가 있습니다.
새 값이 들어오는 경우 첫 번째 열보다 낮아야 합니다. 그런 다음 두 번째 열보다 커야 합니다. 마지막으로 세 번째 열은 마지막 집계로 설정되므로 처음 두 개의 유효성 검사를 충족하는 경우 항상 업데이트됩니다.
결론
이 자습서에서는 다음 작업을 수행하는 방법을 알아보았습니다.
- 다중 열 통계 만들기
- 통계 쿼리
- 타이 브레이킹 작동 방식을 이해합니다.