Ranglisten in Unity-Spielen

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:

  1. leaderboardId
  2. Startposition (Top-Ergebnisse oder Spieler in der Mitte)
  3. Zeilenanzahl
  4. Bestenlistensammlung (sozial oder öffentlich)
  5. Zeitspanne (täglich, wöchentlich, insgesamt)
  6. -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);
            });
    }