2017-06-03 2 views
1

J'ai un jeu simple publié dans Google Play. Lorsque le joueur gagne le jeu, son score devrait être incrémenté dans le classement. Mon problème est que lorsque le joueur gagne le jeu, l'application s'arrête. Je pense que ce problème est dans PlayGamesPlatform.Instance.LoadScores parce que quand j'ai enlevé cette partie, personne n'a eu de problème. Aussi, je veux remarquer que tous les joueurs n'ont pas un tel problème en jeu. Ce problème se produit seulement pour ceux qui n'ont jamais gagné le jeu (ils n'ont aucun score dans le classement). Donc, PlayGamesPlatform.Instance.LoadScores ne fonctionne que pour ceux qui ont déjà un score dans le classement.Comment charger des partitions dans Unity?

Mon script:

PlayGamesPlatform.Instance.LoadScores(GPGSIds.leaderboard_rating, GooglePlayGames.BasicApi.LeaderboardStart.PlayerCentered, 1, GooglePlayGames.BasicApi.LeaderboardCollection.Public, GooglePlayGames.BasicApi.LeaderboardTimeSpan.AllTime, (GooglePlayGames.BasicApi.LeaderboardScoreData data) => 
{ 
    long score; 
    if (long.TryParse(data.PlayerScore.formattedValue, out score)) 
     Social.ReportScore(score + 50, GPGSIds.leaderboard_rating, (bool success) => { }); 
    else 
     Social.ReportScore(50, GPGSIds.leaderboard_rating, (bool success) => { }); 
}); 
+0

Pouvez-vous essayer de mettre les scores de tous les joueurs à 0 par défaut afin que les joueurs qui n'ont pas encore joué peuvent faire des appels à loadScores? – noogui

+0

@noogui merci. Il m'a aidé – irakliy01

+0

Gj! C'est bon d'entendre que ça fonctionne pour vous. – noogui

Répondre

1

Essayez cette google sample from github

En utilisant PlayGamesPlatform.LoadScores()

Cette méthode utilise directement la PlayGamesPlatform. Cette approche fournit une flexibilité et des informations supplémentaires lors de l'accès aux données du classement.

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

Les paramètres de LoadScores() sont:

leaderboardId position de départ (les meilleurs scores ou joueur centré) nombre rangée collection leaderboard (social ou public) laps de temps (quotidienne, hebdomadaire, tous les temps) callback acceptant un objet LeaderboardScoreData. La classe LeaderboardScoreData est utilisée pour renvoyer des informations à l'appelant lors du chargement des scores. Les membres sont: 1. Id - l'identifiant du leaderboard 2. Valide - vrai si les données retournées sont valides (l'appel a réussi) 3. Statut - le ResponseStatus de l'appel 4. ApproximateCount - le nombre approximatif de scores dans le leaderboard 5. Titre - le titre du leaderboard 6. PlayerScore - le score du joueur actuel 7. Scores - la liste des scores 8. PrevPageToken - un jeton qui peut être utilisé pour appeler LoadMoreScores() à obtenir le page précédente des partitions. 9. NextPageToken - un jeton qui peut être utilisé pour appeler LoadMoreScores() pour obtenir la page suivante des 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; 
      }); 
    } 

référence supplémentaire How to get the user score value from Google Play Services Leaderboard.

P.S .:

Essayez de régler les scores de tous les joueurs par défaut 0 pour les joueurs qui havent encore joué peuvent faire des appels à loadScores.