Classifiche nei giochi Unity

Questo argomento descrive come utilizzare le classifiche dei servizi per i giochi di Play in Unity giochi.

Prima di iniziare

Configura il tuo progetto Unity e il plug-in di Google Play Giochi per Unity. Per per i dettagli, consulta la Guida introduttiva.

Crea eventi

Puoi creare classifiche in Google Play Console. Per maggiori dettagli, consulta guida alle classifiche per Servizi per i giochi di Play. Dopo aver creato una classifica, aggiungi la relativa risorsa Android al plug-in come descritto nella guida introduttiva.

Pubblica un punteggio in una classifica

Per pubblicare un punteggio in una classifica, chiama Social.ReportScore.

    using GooglePlayGames;
    using UnityEngine.SocialPlatforms;
    ...
    // Post score 12345 to leaderboard ID "Cfji293fjsie_QA")
    Social.ReportScore(12345, "Cfji293fjsie_QA", (bool success) => {
        // Handle success or failure
    });

Per pubblicare un punteggio e includere un tag di metadati, utilizza un'istanza PlayGamesPlatform direttamente:

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

Tieni presente che la piattaforma e il server scartano automaticamente i punteggi che sono inferiore al miglior punteggio esistente del giocatore, in modo che tu possa inviare punteggi liberamente senza eseguire controlli per verificare se il punteggio è superiore o meno al punteggio esistente.

Mostra UI di Classifica

Per visualizzare l'interfaccia utente integrata per tutte le classifiche, chiama Social.ShowLeaderboardUI.

    using GooglePlayGames;
    using UnityEngine.SocialPlatforms;
    ...
    // Show leaderboard UI
    Social.ShowLeaderboardUI();

Se vuoi mostrare una determinata classifica anziché tutte le classifiche, può passare un ID classifica al metodo. Questo, però, è un account di Play Giochi quindi l'oggetto Social.Active deve essere trasmesso a un PlayGamesPlatform per prima cosa:

    using GooglePlayGames;
    using UnityEngine.SocialPlatforms;
    ...
    // Show leaderboard UI
    PlayGamesPlatform.Instance.ShowLeaderboardUI("Cfji293fjsie_QA");

Accedere ai dati della classifica

Esistono due metodi per recuperare i dati dei punteggi della classifica.

Utilizza Social.ILeaderboard

Questo metodo utilizza l'interfaccia ILeaderboard per definire l'ambito e i filtri per ottenere i dati. Questo approccio ti consente di configurare: 1. L'ID della classifica 2. La raccolta (social o pubblica) 3. Il periodo di tempo (giornaliero, settimanale, dall'inizio) 4, La posizione dei ranking per iniziare a recuperare i punteggi. 5. Il numero di punteggi (il valore predefinito è 25). 6. Filtra per ID utente.

Se il parametro from non è positivo, i risultati restituiti vengono centrata sul giocatore, vale a dire che i punteggi relativi al punteggio del giocatore corrente sono restituito.

    ILeaderboard lb = PlayGamesPlatform.Instance.CreateLeaderboard();
    lb.id = "MY_LEADERBOARD_ID";
    lb.LoadScores(ok =>
        {
            if (ok) {
                LoadUsersAndDisplay(lb);
            }
            else {
                Debug.Log("Error retrieving leaderboardi");
            }
        });

Usa PlayGamesPlatform.LoadScores()

Questo metodo utilizza direttamente PlayGamesPlatform, che fornisce ulteriori flessibilità e informazioni quando si accede ai dati delle classifiche.

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

I parametri per LoadScores() sono:

  1. ID classifica
  2. posizione iniziale (punteggi massimi o giocatore centrato)
  3. numero di righe
  4. raccolta di classifiche (social o pubbliche)
  5. periodo di tempo (giornaliero, settimanale, dall'inizio)
  6. che accetta un oggetto LeaderboardScoreData.

La classe LeaderboardScoreData viene utilizzata per restituire le informazioni a durante il caricamento dei punteggi. I membri sono: 1. Id: l'ID della classifica. 2. Valido: true se i dati restituiti sono validi (la chiamata è riuscita) 3. Status - Il valore ResponseStatus della chiamata 4, AccelerateCount: il numero approssimativo di punteggi nella classifica 5. Titolo: il titolo della classifica. 6. PlayerScore: il punteggio del giocatore corrente. 7. Punteggi: l'elenco dei punteggi. 8, PrevPageToken: un token che può essere utilizzato per chiamare LoadMoreScores() a visualizza la pagina precedente dei punteggi. 9. NextPageToken: un token che può essere utilizzato per chiamare LoadMoreScores() a visualizzare la pagina successiva dei punteggi.

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

Questa chiamata potrebbe non riuscire quando provi a caricare amici con ResponseCode.ResolutionRequired se l'utente non ha condiviso il suo elenco di amici con il gioco. In questo caso, utilizza AskForLoadFriendsResolution per richiedere l'accesso.

Recuperare i nomi dei giocatori

Ogni punteggio ha lo userId del giocatore che ha creato il punteggio. Puoi utilizzare Social.LoadUsers() per caricare il profilo giocatore. Ricorda che i contenuti del profilo giocatore sono soggetti alle impostazioni di privacy dei giocatori.

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