Classifiche nei giochi Unity

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

Prima di iniziare

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

Crea eventi

Puoi creare classifiche in Google Play Console. Per informazioni dettagliate, consulta la guida alle classifiche per i 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 direttamente un'istanza PlayGamesPlatform:

    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 scaricheranno automaticamente i punteggi inferiori rispetto al miglior punteggio esistente del giocatore, in modo che tu possa inviare i punteggi liberamente senza alcun controllo per verificare se il punteggio è maggiore o meno del punteggio esistente del giocatore.

Mostra l'interfaccia utente di Leaderboard

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

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

Se desideri mostrare una determinata classifica invece di tutte le classifiche, puoi passare un ID classifica al metodo. Tuttavia, si tratta di un'estensione di Play Giochi, quindi l'oggetto Social.Active deve essere prima trasmesso a un oggetto PlayGamesPlatform:

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

Accedere ai dati di Classifica

Esistono due metodi per recuperare i dati relativi ai punteggi della classifica.

Usa Social.ILeaderboard

Questo metodo utilizza l'interfaccia ILeaderboard per definire l'ambito e i filtri per ottenere i dati. Questo approccio consente di configurare: 1. L'ID della classifica. 2. La raccolta (social o pubblica) 3. Il periodo di tempo (giornaliero, settimanale, sempre) 4. La posizione in classifica 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 sono incentrati sul giocatore, ovvero vengono restituiti i punteggi relativi al punteggio del giocatore corrente.

    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 offre ulteriori flessibilità e informazioni durante l'accesso ai dati della classifica.

    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 (migliori punteggi o centrata sul giocatore)
  3. conteggio righe
  4. raccolta di classifiche (social o pubblica)
  5. periodo di tempo (giornaliero, settimanale, dall'inizio)
  6. il callback che accetta un oggetto LeaderboardScoreData.

La classe LeaderboardScoreData viene utilizzata per restituire informazioni al chiamante 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. Stato: il valore ResponseStatus della chiamata. 4. AverageCount: il numero approssimativo di punteggi nella classifica 5. Titolo: il titolo della classifica 6. PlayerScore: il punteggio del giocatore corrente 7. Punteggi: la lista dei punteggi 8. PrevPageToken: un token che può essere utilizzato per chiamare LoadMoreScores() e visualizzare la pagina dei punteggi precedente. 9. NextPageToken: un token che può essere utilizzato per chiamare LoadMoreScores() e ottenere 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 durante il tentativo di caricamento degli 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.

Trova i nomi dei giocatori

A ogni punteggio è associato lo userId del giocatore che lo ha realizzato. Puoi usare Social.LoadUsers() per caricare il profilo del player. Ricorda che i contenuti del profilo giocatore sono soggetti alle impostazioni della privacy del player.

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