Как загрузить оценки в Unity?

У меня есть простая игра, опубликованная в Google Play. Когда игрок выигрывает игру, его счет должен увеличиваться в таблице лидеров. Моя проблема в том, что когда игрок выигрывает игру, приложение останавливается. Я думаю, что проблема в PlayGamesPlatform.Instance.LoadScores, потому что, когда я удалил эту часть, ни у кого не было проблем. Также хочу заметить, что не у каждого игрока такая проблема в игре. Эта проблема возникает только у тех, кто ни разу не выиграл игру (у них нет очков в таблице лидеров). Итак, PlayGamesPlatform.Instance.LoadScores работает только с теми, у кого уже есть очки в таблице лидеров.

Мой сценарий:

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

person irakliy01    schedule 03.06.2017    source источник
comment
Можете ли вы попробовать установить очки всех игроков по умолчанию на 0, чтобы игроки, которые еще не играли, могли вызывать loadScores?   -  person noogui    schedule 04.06.2017
comment
@noogui спасибо. мне помогло   -  person irakliy01    schedule 04.06.2017
comment
ГДж! Приятно слышать, что это работает для вас.   -  person noogui    schedule 04.06.2017


Ответы (1)


Попробуйте этот пример Google из github

Использование PlayGamesPlatform.LoadScores()

Этот метод напрямую использует PlayGamesPlatform. Такой подход обеспечивает дополнительную гибкость и информацию при доступе к данным таблицы лидеров.

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

Параметры для LoadScores():

LeaderboardId начальная позиция (лучшие результаты или по центру игрока) количество строк коллекция таблицы лидеров (социальная или общедоступная) временной интервал (ежедневно, еженедельно, за все время) обратный вызов, принимающий объект LeaderboardScoreData. Класс LeaderboardScoreData используется для возврата информации вызывающей стороне при загрузке результатов. Членами являются: 1. Id — идентификатор таблицы лидеров 2. Valid — истина, если возвращаемые данные действительны (вызов прошел успешно) 3. Status — статус ответа вызова 4. ApproximateCount — приблизительное количество очков в таблице лидеров 5 .Title — название таблицы лидеров 6. PlayerScore — счет текущего игрока 7. Scores — список результатов 8. PrevPageToken — токен, который можно использовать для вызова LoadMoreScores() для получения предыдущей страницы результатов. 9. NextPageToken — токен, который можно использовать для вызова LoadMoreScores() для получения следующей страницы результатов.

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

Дополнительная ссылка Как получить значение пользовательского рейтинга из таблицы лидеров сервисов Google Play.

P.S.:

Попробуйте установить для очков всех игроков значение по умолчанию 0, чтобы игроки, которые еще не играли, могли вызывать loadScores.

person noogui    schedule 03.06.2017