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
Le classifiche vengono create in Google Play Console. Per maggiori dettagli, consulta la guida alle classifiche per i servizi Google Play. Dopo aver creato una classifica, aggiungi la risorsa Android al plug-in come descritto nella guida introduttiva.
Pubblicare 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 punteggio più alto esistente del giocatore, quindi puoi inviare i punteggi liberamente senza alcun controllo per verificare se il punteggio è superiore a quello esistente del giocatore.
Mostra l'interfaccia utente della classifica
Per mostrare 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 classifica specifica anziché tutte le classifiche, puoi trasmettere un ID classifica al metodo. Tuttavia, si tratta di un'estensione di Play Giochi, quindi l'oggetto Social.Active deve essere convertito in un oggetto PlayGamesPlatform:
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 del punteggio della classifica.
Utilizzare 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. Filtra per ID utente.
Se il parametro from non è positivo, i risultati restituiti sono centrati sul giocatore, il che significa che vengono restituiti i punteggi intorno 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 quando si accede 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 centrata 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.
Ottenere i nomi dei giocatori
Ogni punteggio ha l'ID utente del giocatore che lo ha ottenuto. Puoi utilizzare
Social.LoadUsers()
per caricare il profilo 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);
});
}