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