Unity GooglePlayGames LoadScores всегда ничего не возвращает

#c# #unity3d #google-play-services #google-play-games

#c# #unity3d #google-play-сервисы #google-play-игры

Вопрос:

Я пытаюсь получить наивысший результат из таблицы лидеров, используя Google Play Games, однако он ничего не возвращает. Может ли кто-нибудь указать мне правильное направление?

     public int WorldRecord()
{
    int topScore = 0;
    PlayGamesPlatform.Instance.LoadScores(
        GPGSIds.leaderboard_quick_fire_scores,
        LeaderboardStart.TopScores, 1,
        LeaderboardCollection.Public,
        LeaderboardTimeSpan.AllTime,
        (LeaderboardScoreData data) =>
        {
            topScore = (int)data.Scores[0].value;
        });

    return topScore;
        
}
 

Спасибо

Ответ №1:

PlayGamesPlatform.Instance.LoadScores выполняется асинхронно и выполняет переданное действие после завершения.

Однако ваш метод не ждет, пока этот запрос фактически завершится, и, таким образом, просто возвращает значение по умолчанию 0 еще до LoadScores фактического завершения и предоставляет действительный результат.

Вероятно, вам лучше использовать какой-то обратный вызов, например,

 public void WorldRecord(Action<int> onResult)
{
    PlayGamesPlatform.Instance.LoadScores(
        GPGSIds.leaderboard_quick_fire_scores,
        LeaderboardStart.TopScores, 1,
        LeaderboardCollection.Public,
        LeaderboardTimeSpan.AllTime,
        (LeaderboardScoreData data) =>
        {
            onResult?.Invoke((int)data.Scores[0].value);
        });        
}
 

А затем передайте обратный вызов, что должно произойти, когда результат будет готов, например

 WorldRecord(topScore => 
{
    Debug.Log($"Top Score: {topScore}");
});