Mehr Mit Statistiken machen
In diesem Tutorial werden erweiterte Features behandelt, die der Dienst zu bieten hat, z. B. das Erstellen von mehrspaltigen Statistiken und mehrere Möglichkeiten zum Abfragen von Statistiken. Mit diesen Features möchten wir die Grenzen der Möglichkeiten eines Statistikdiensts überschreiten.
Wir verwenden einen stark kompetitiven Shooter als Beispiel dafür, wie diese neuen Features uns helfen könnten, einige Probleme zu lösen. In diesem Spiel gibt es mehrere Waffen, die es dem Spieler ermöglichen, einen langen Schuss zu treffen. Wir wollen nicht nur die Entfernung des Long Shots verfolgen, sondern auch das Kaliber der verwendeten Kugel.
Voraussetzung
Führen Sie die Schritte unter Erstellen einer einfachen Statistik aus.
Erstellen einer mehrspaltigen Statistikdefinition
Um mit diesem Beispiel zu beginnen, müssen wir eine komplexere Statistikdefinition erstellen als die zuvor.
Wir definieren mehrere Spalten, um die wichtigsten Aspekte des Long shots zuzuordnen: Entfernungen und Kaliber. Das folgende Beispiel zeigt, wie Sie die Statistikdefinition mithilfe des C#-SDK erstellen.
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);
}
Die wichtigste Komponente ist hier der Parameter, der Columns
mehrere Definitionen von StatisticColumn
zulässt, sodass die Statistik mehrere Werte haben kann. Die einzige Ausnahme ist, wenn wir die Aggregation von Sum
verwenden.
Hinzufügen von Daten zu einer Statistik
Nachdem wir nun unsere Statistik erstellt haben, fügen wir Daten hinzu. Der Standard Unterschied zu unserem vorherigen Tutorial zu diesem Thema besteht darin, dass wir jetzt zwei verschiedene Werte hinzufügen müssen. Das folgende Beispiel zeigt, wie Sie unserer Statistik mithilfe des C#-SDK Daten hinzufügen.
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);
}
Hier basiert der Standard Punkt auf dem Scores
Parameter innerhalb der Statistik, die hinzugefügt werden soll. Im Codebeispiel sehen wir zwei verschiedene Werte, die alle Zeichenfolgen sind, aber es handelt sich nur um eine Eingabedefinition innerhalb der Statistik. Diese Werte werden als Zahlen behandelt. Die Länge der Liste der Bewertungen sollte immer mit der Anzahl der Spalten der Statistikdefinition übereinstimmen.
Abrufen von Daten aus einer Statistik
Nun lernen wir eine Möglichkeit kennen, mehrere Entitäten abzufragen und alle Statistiken zu jeder dieser Entitäten abzurufen. Das folgende Beispiel zeigt, wie Sie unserer Statistik mithilfe des C#-SDK Daten hinzufügen.
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)}");
}
}
}
Krawattenbruch
Wenn wir über eine mehrspaltige Statistikdefinition verfügen, könnten wir auf ein Szenario stoßen, für das ein Tie-Breaking erforderlich ist. Dieser Mechanismus basiert auf der Art und Weise, wie Spalten hinzugefügt wurden. Wenn ein neuer Wert eingeht, überprüft das System, ob er die Kriterien der Aggregation für die erste Spalte erfüllt. Wenn der Wert identisch ist, wird die Kriterien für die zweite Spalte überprüft. Dieses Verhalten wird für die folgenden Spalten fortgesetzt.
Beispielsweise können wir eine Statistik mit drei Spalten haben:
- Die erste Spalte verfügt über min Aggregation.
- Die zweite Spalte weist die maximale Aggregation auf.
- Die dritte Spalte weist letzte Aggregation auf.
Wenn ein neuer Wert eingeht, muss er niedriger als die erste Spalte sein. Dann muss sie für die zweite Spalte größer sein. Schließlich wird die dritte Spalte auf Letzte Aggregation festgelegt. Wenn sie also die ersten beiden Überprüfungen erfüllt, wird immer aktualisiert.
Abschluss
In diesem Tutorial haben wir gelernt, wie die folgenden Vorgänge ausgeführt werden:
- Erstellen einer mehrspaltigen Statistik
- Abfragen von Statistiken
- Erfahren Sie, wie tie-breaking funktioniert.