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:
- ID classifica
- posizione iniziale (punteggi massimi o giocatore centrato)
- numero di righe
- raccolta di classifiche (social o pubbliche)
- periodo di tempo (giornaliero, settimanale, dall'inizio)
- 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);
});
}