Questo argomento descrive come usare 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 Games per Unity. Per maggiori dettagli, consulta la guida introduttiva.
Crea eventi
Puoi creare le classifiche in Google Play Console. Per maggiori dettagli, consulta la guida alle classifiche per i servizi per i giochi di Play. Dopo aver creato una classifica, aggiungi la 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 scartano automaticamente i punteggi inferiori al miglior punteggio esistente del giocatore, quindi puoi inviare i punteggi liberamente senza alcun controllo per verificare se il punteggio è superiore o meno a quello esistente del giocatore.
Mostra l'interfaccia utente della classifica
Per mostrare l'UI integrata per tutte le classifiche, chiama Social.ShowLeaderboardUI.
using GooglePlayGames;
using UnityEngine.SocialPlatforms;
...
// Show leaderboard UI
Social.ShowLeaderboardUI();
Se vuoi mostrare una classifica specifica anziché tutte le classifiche, puoi passare un ID classifica al metodo. Tuttavia, trattandosi di un'estensione di Play Games, devi prima eseguire il cast dell'oggetto Social.Active in un oggetto PlayGamesPlatform:
using GooglePlayGames;
using UnityEngine.SocialPlatforms;
...
// Show leaderboard UI
PlayGamesPlatform.Instance.ShowLeaderboardUI("Cfji293fjsie_QA");
Accedi ai dati della classifica
Esistono due metodi per recuperare i dati del punteggio 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 classifica 2. La raccolta (social o pubblica) 3. L'intervallo di tempo (giornaliero, settimanale, totale) 4. La posizione nel ranking da cui iniziare a recuperare i punteggi 5. Il numero di punteggi (il valore predefinito è 25) 6. Il filtro per ID utente
Se il parametro from non è positivo, i risultati restituiti sono incentrati sul giocatore, ovvero vengono restituiti i punteggi vicini al punteggio del giocatore attuale.
ILeaderboard lb = PlayGamesPlatform.Instance.CreateLeaderboard();
lb.id = "MY_LEADERBOARD_ID";
lb.LoadScores(ok =>
{
if (ok) {
LoadUsersAndDisplay(lb);
}
else {
Debug.Log("Error retrieving leaderboardi");
}
});
Utilizza PlayGamesPlatform.LoadScores()
Questo metodo utilizza direttamente PlayGamesPlatform, che offre maggiore flessibilità e informazioni per 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:
- leaderboardId
- posizione iniziale (punteggi migliori o incentrata sul giocatore)
- conteggio righe
- raccolta di classifiche (social o pubbliche)
- intervallo di tempo (giornaliero, settimanale, totale)
- 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 - the leaderboard id
2. Valid - true if the returned data is valid (the call was successful)
3. Status - the ResponseStatus of the call
4. ApproximateCount - the approximate number of scores in the leaderboard
5. Title - the title of the leaderboard
6. PlayerScore - the score of the current player
7. Scores - the list of scores
8. PrevPageToken - a token that can be used to call `LoadMoreScores()` to
get the previous page of scores.
9. NextPageToken - a token that can be used to call `LoadMoreScores()` to
get the next page of scores.
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 caricare gli amici con
ResponseCode.ResolutionRequired se l'utente non ha condiviso il proprio elenco di amici
con il gioco. In questo caso, utilizza AskForLoadFriendsResolution per richiedere
l'accesso.
Ottieni i nomi dei giocatori
Ogni punteggio include l'ID utente del giocatore che lo ha ottenuto. Puoi usare
Social.LoadUsers() per caricare il profilo del giocatore. Ricorda che i contenuti
del profilo del giocatore sono soggetti alle impostazioni della 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);
});
}