创建基本统计信息

本教程介绍如何使用新的统计服务创建基本统计信息。 让我们从射击游戏的示例开始,该游戏希望跟踪玩家何时击中长射。

创建统计信息

第一步是创建包含用于跟踪长镜头的main元素的统计定义。 对于我们的射击游戏,我们只需要一列长射的距离。 以下示例演示如何使用 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,
            }
        },
    };
    
    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createStatDefResult = await statsAPI.CreateStatisticDefinitionAsync(statDefinitionRequest);
}

现在,让我们解释一下此示例的一些关键元素:

  • AuthenticationContext:此参数处理对服务的每个请求背后的所有身份验证。 有关详细说明,可以检查以下页面:快速入门统计信息
  • Name:此参数可帮助你标识统计信息定义。 请务必在此处保留相关内容,因为它将用于发出其他请求来检索信息
  • EntityType:此参数指定要为其创建统计信息的实体类型。 可在此处了解详细信息: 实体编程模型
  • VersionConfiguration:此参数允许为在某个时间段后自行重置的统计信息设置版本控制策略。 此处深入介绍了此概念: 季节性统计
  • Columns:在这里,我们定义统计信息的列数。 在此示例中,我们只为长镜头设置一列。 我们还将 定义为 AggregationMethod Max,这意味着仅当新值大于上一个值时,才会更新统计信息。
    • AggregationMethod 四个可能的值:
      • Max:新值需要大于上一个值。
      • Min:新值需要小于上一个值。
      • Last:它始终使用最新值进行更新。
      • Sum:将上一个值和新值相加。

清除所有信息后,现在可以运行示例并创建第一个统计信息。

获取统计信息定义

在向此统计信息添加数据之前,我们希望确保它已正确创建。 为此,我们提供了一个示例,说明如何检索统计信息定义。

public static async Task GetStatisticDefinition(PlayFabAuthenticationContext context, string statName)
{
    PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);
    GetStatisticDefinitionRequest statDefReq = new GetStatisticDefinitionRequest()
    {
        Name = statName
    };

    PlayFabResult<GetStatisticDefinitionResponse> getStatDefResult = await statsAPI.GetStatisticDefinitionAsync(statDefReq)
}

若要检索统计信息定义,请指定创建的统计信息的名称。 如果有多个统计信息定义,则可以使用下一个示例通过单个请求获取所有统计信息定义。

public static async Task GetStatisticDefinitions(PlayFabAuthenticationContext context)
{
     PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
     ListStatisticDefinitionsRequest request = new ListStatisticDefinitionsRequest();
     PlayFabResult<ListStatisticDefinitionsResponse> getStatDefsResult = await leaderboardsAPI.ListStatisticDefinitionsAsync(request);
           
}

删除统计信息定义

如果要删除统计信息定义以添加更多列或修复某些错误,可按如下所示作:


public static async Task DeleteStatisticDefinition(PlayFabAuthenticationContext context, string statName)
{
    PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);
    DeleteStatisticDefinitionRequest deleteStatDefRequest = new DeleteStatisticDefinitionRequest()
    {
        AuthenticationContext = context,
        Name = statName,
    };
    
    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> statResponse = await statsAPI.DeleteStatisticDefinitionAsync(deleteStatDefRequest);    
}

将数据添加到统计信息

继续我们的射击示例,我们现在知道如何创建统计定义,检索它,并在必要时将其删除。 下一步是开始向统计信息添加数据。

请记住,这些统计信息是基于实体的统计信息,这意味着条目是实体。 在我们的特定示例中,我们使用实体类型title_player_account,因此我们的统计信息会跟踪玩家的信息。 但请记住,也可以使用其他实体类型。 可在此处检查它们:可用的内置实体类型

现在,让我们深入了解如何将数据添加到统计信息。

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()},
            }
        }
    };

    PlayFabResult<UpdateStatisticsResponse> updateResult = await statsAPI.UpdateStatisticsAsync(updateStatRequest);
}

现在,让我们解释一下此示例的一些关键元素:

  • Entity:此参数对应于要从中更新统计信息的实体。
  • Statistics:此参数对应于实体的实际统计信息集。
  • StatisticUpdate:此参数对应于要添加的统计信息值。
    • Scores:此参数对应于可添加到一个实体的分数列表。 请记住,统计信息可以包含多个列。 可在此处深入检查以下概念:使用统计信息执行更多作
    • Name:此参数对应于创建统计信息定义时设置的统计信息名称。

明确这些概念后,现在可以将数据添加到统计信息。

从统计信息检索数据

让我们快速回顾一下。 此时,你创建了一个统计信息,检查了所有配置详细信息,并开始向其添加数据。 现在,让我们想象一下,一些玩家已经开始使用你的游戏,所有这些都是令人印象深刻的长射。 我们想要查询其中一个。 在以下示例中,我们将演示如何执行此作。

public static async Task GetStatsForEntity(PlayFabAuthenticationContext context, string entityId)
{
    PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);

    GetStatisticsRequest request = new GetStatisticsRequest()
    {
        AuthenticationContext = context,
        Entity = new PlayFab.LeaderboardsModels.EntityKey()
        {
            Id = entityId,
            Type = EntityType
        },
    };
    
    PlayFabResult<GetStatisticsResponse> result = await statsAPI.GetStatisticsAsync(request);

    Console.WriteLine("Stats for entity: " + result.Result.Entity.ToString());
    foreach (KeyValuePair<string, PlayFab.LeaderboardsModels.EntityStatisticValue> statValuePair in result.Result.Statistics)
    {
        Console.WriteLine($"{statValuePair.Value.Name} : {string.Join('|', statValuePair.Value.Scores)}");
    }
}

在这里,我们查询与实体关联的所有统计信息,然后打印名称及其相应的值。

删除统计信息值

我们的统计信息按预期工作,并且你的游戏中有一群玩家。 但是,我们开始注意到游戏中的一些异常行为。 因此,我们决定重新开始并删除统计数据的数据。 在下一个示例中,可以查看如何从统计信息中获取数据。


 public static async Task DeleteStats(PlayFabAuthenticationContext context, string entityId, List<StatisticDelete> stats)
 {
     PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);
     DeleteStatisticsRequest statsDelReq = new DeleteStatisticsRequest()
     {
         Entity = new PlayFab.LeaderboardsModels.EntityKey()
         {
            Id = entityId,
            Type = EntityType
         },
         Statistics = stats
     };
 
     PlayFabResult<DeleteStatisticsResponse> delStatsResult = await statsAPI.DeleteStatisticsAsync(statsDelReq);     
 }

现在,让我们解释一下此示例的一些关键元素:

  • Entity:此参数是要从中删除的实体。
  • List<StatisticDelete>:此参数是要删除的统计信息的名称列表。

结论

在本教程中,我们学习了如何执行以下作:

  • 创建统计信息
  • 检查统计信息的配置
  • 删除统计信息配置
  • 填充统计信息
  • 删除统计信息中的条目。

另请参阅