In diesem Artikel wird beschrieben, wie du Bestenlisten der Play-Spieldienste in Unity verwendest. Spiele.
Vorbereitung
Richten Sie Ihr Unity-Projekt und das Google Play Spiele-Plug-in für Unity ein. Für Weitere Informationen
Ereignisse erstellen
Bestenlisten werden in der Google Play Console erstellt. Weitere Informationen finden Sie in der Leitfaden zu Bestenlisten für Play-Spieldienste Fügen Sie nach dem Erstellen einer Bestenliste die zugehörige Android-Ressource hinzu zum Plug-in hinzufügen, wie in den Startleitfaden.
Punktzahl in einer Bestenliste posten
Rufen Sie Social.ReportScore auf, um eine Punktzahl in einer Bestenliste zu posten.
using GooglePlayGames;
using UnityEngine.SocialPlatforms;
...
// Post score 12345 to leaderboard ID "Cfji293fjsie_QA")
Social.ReportScore(12345, "Cfji293fjsie_QA", (bool success) => {
// Handle success or failure
});
Verwende eine PlayGamesPlatform
-Instanz, um eine Punktzahl zu posten und ein Metadaten-Tag einzufügen
direkt:
using GooglePlayGames;
using UnityEngine.SocialPlatforms;
...
// Post score 12345 to leaderboard ID "Cfji293fjsie_QA" and tag "FirstDaily")
PlayGamesPlatform.Instance.ReportScore(12345, "Cfji293fjsie_QA", "FirstDaily", (bool success) => {
// Handle success or failure
});
Beachten Sie, dass die Plattform und der Server Punktzahlen, die niedriger ist als der vorhandene Highscore des Spielers, sodass Sie Ihre Punktzahlen frei einreichen können. Es wurden keine Prüfungen durchgeführt, um zu testen, ob die Punktzahl größer ist als die des Spielers. vorhandenen Wertung.
Benutzeroberfläche der Bestenliste anzeigen
Rufen Sie Social.ShowLeaderboardUI auf, um die integrierte Benutzeroberfläche für alle Bestenlisten anzuzeigen.
using GooglePlayGames;
using UnityEngine.SocialPlatforms;
...
// Show leaderboard UI
Social.ShowLeaderboardUI();
Wenn statt aller nur eine bestimmte Bestenliste angezeigt werden soll,
eine Bestenlisten-ID an die Methode übergeben. Dies ist jedoch ein Play Spiele-
Erweiterung, sodass das Social.Active-Objekt in ein PlayGamesPlatform
-Element umgewandelt werden muss.
-Objekt enthält:
using GooglePlayGames;
using UnityEngine.SocialPlatforms;
...
// Show leaderboard UI
PlayGamesPlatform.Instance.ShowLeaderboardUI("Cfji293fjsie_QA");
Auf Leaderboard-Daten zugreifen
Es gibt zwei Methoden, um die Punktzahldaten der Bestenliste abzurufen.
Social.ILeaderboard verwenden
Diese Methode verwendet die ILeaderboard-Oberfläche zur Definition des Umfangs und der Filter. für den Abruf der Daten. Mit diesem Ansatz können Sie Folgendes konfigurieren: 1. Bestenlisten-ID 2. Die Sammlung (sozial oder öffentlich) 3. Zeitraum (täglich, wöchentlich, insgesamt) 4. Rangposition, an der Punktzahlen abgerufen werden sollen. 5. Die Anzahl der Bewertungen (Standardwert: 25). 6. Nach Nutzer-ID filtern.
Wenn der Parameter „from“ nicht positiv ist, werden die Ergebnisse zurückgegeben: spielerzentriert, was bedeutet, dass die Punktzahlen um die Punktzahl des aktuellen Spielers herum zurückgegeben.
ILeaderboard lb = PlayGamesPlatform.Instance.CreateLeaderboard();
lb.id = "MY_LEADERBOARD_ID";
lb.LoadScores(ok =>
{
if (ok) {
LoadUsersAndDisplay(lb);
}
else {
Debug.Log("Error retrieving leaderboardi");
}
});
PlayGamesPlatform.LoadScores() verwenden
Diese Methode verwendet direkt PlayGamesPlatform
, was zusätzliche
Flexibilität und Informationen beim Zugriff auf Daten der Bestenliste
PlayGamesPlatform.Instance.LoadScores(
GPGSIds.leaderboard_leaders_in_smoketesting,
LeaderboardStart.PlayerCentered,
100,
LeaderboardCollection.Public,
LeaderboardTimeSpan.AllTime,
(data) =>
{
mStatus = "Leaderboard data valid: " + data.Valid;
mStatus += "\n approx:" +data.ApproximateCount + " have " + data.Scores.Length;
});
Die Parameter für LoadScores() sind:
- leaderboardId
- Startposition (Top-Ergebnisse oder Spieler in der Mitte)
- Zeilenanzahl
- Bestenlistensammlung (sozial oder öffentlich)
- Zeitspanne (täglich, wöchentlich, insgesamt)
- -Callback, der ein LeaderboardScoreData-Objekt akzeptiert.
Die Klasse LeaderboardScoreData
wird verwendet, um Informationen an die
beim Laden von Spielständen. Mitglieder:
1. ID: die Bestenlisten-ID
2. Gültig – "true", wenn die zurückgegebenen Daten gültig sind (der Aufruf war erfolgreich)
3. Status - der ResponseStatus des Anrufs
4. NeighborhoodCount - die ungefähre Anzahl der Punktzahlen in der Bestenliste.
5. Title (Titel): Titel der Bestenliste
6. PlayerScore - das Ergebnis des aktuellen Spielers
7. Punktzahlen - die Liste der Punktzahlen
8. PrevPageToken – ein Token, mit dem LoadMoreScores()
aufgerufen werden kann, um
Vorherige Seite mit Punktzahlen abrufen.
9. NextPageToken – ein Token, mit dem LoadMoreScores()
aufgerufen werden kann, um
die nächste Seite der Punktzahlen abrufen.
void GetNextPage(LeaderboardScoreData data)
{
PlayGamesPlatform.Instance.LoadMoreScores(data.NextPageToken, 10,
(results) =>
{
mStatus = "Leaderboard data valid: " + data.Valid;
mStatus += "\n approx:" +data.ApproximateCount + " have " + data.Scores.Length;
});
}
Dieser Anruf kann fehlschlagen, wenn Sie versuchen, Freunde mit
ResponseCode.ResolutionRequired
, wenn der Nutzer seine Freundesliste nicht geteilt hat
mit dem Spiel. Verwenden Sie in diesem Fall AskForLoadFriendsResolution
, um eine Anfrage
Zugriff haben.
Spielernamen abrufen
Jeder Score enthält die userId des Spielers, der den Score erstellt hat. Sie können
Social.LoadUsers()
, um das Spielerprofil zu laden. Denken Sie daran, dass der Inhalt
des Spielerprofils unterliegen den Datenschutzeinstellungen der Spieler.
internal void LoadUsersAndDisplay(ILeaderboard lb)
{
// Get the user ids
List<string> userIds = new List<string>();
foreach(IScore score in lb.scores) {
userIds.Add(score.userID);
}
// Load the profiles and display (or in this case, log)
Social.LoadUsers(userIds.ToArray(), (users) =>
{
string status = "Leaderboard loading: " + lb.title + " count = " +
lb.scores.Length;
foreach(IScore score in lb.scores) {
IUserProfile user = FindUser(users, score.userID);
status += "\n" + score.formattedValue + " by " +
(string)(
(user != null) ? user.userName : "**unk_" + score.userID + "**");
}
Debug.log(status);
});
}