Я использую Google Play Games Services Unity Plugin для создания игры для Android, как описано в: https://github.com/playgameservices/play-games-plugin-for-unity
Проблема:
Когда я загружаю баллы с использованием API (Social API или PlayGamesPlatform.Instance объекта плагина Google Play), я получаю устаревшие оценки. Но, когда я использую функцию ShowLeaderBoardUI(), в графическом интерфейсе правильные оценки.
Таким образом, в публикациях нет проблем.
Я использую следующий фрагмент, чтобы загружать пользовательские баллы из Google Play Game Services ScoreBoard:
void LoadUsersAndDisplay(int leaderBoardID,ILeaderboard lb,LeaderBoardEntry[] resultingEntries)
{
// 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)
PlayGamesPlatform.Instance.LoadUsers(userIds.ToArray(), (users) =>
{
string status = "Leaderboard loading: " + lb.title + " count = " +
lb.scores.Length;
int currentUserIndex = 0;
foreach(IScore score in lb.scores) {
IUserProfile user = users[currentUserIndex];
status += "\n" + score.formattedValue + " by " +
(string)(
(user != null) ? user.userName : "**unk_" + score.userID + "**");
resultingEntries[currentUserIndex] = new LeaderBoardEntry(score.rank,user.userName,score.value);
currentUserIndex++;
}
// Get the local user score
LeaderBoardEntry localUserEntry = new LeaderBoardEntry(lb.localUserScore.rank, Social.localUser.userName,lb.localUserScore.value);
// Notify the observers about the receiving of the scores
foreach (LeaderBoardObserver currentObserver in observers) {
Debug.Log ("Notifying the leaderboard observer");
currentObserver.OnScoresReceived (leaderBoardID,resultingEntries,localUserEntry);
}
Debug.Log(status);
});
}
public void getScores(int lbID){
ILeaderboard lb = PlayGamesPlatform.Instance.CreateLeaderboard();
lb.id = leaderboards [lbID].lbOfficialID;
lb.timeScope = TimeScope.AllTime;
lb.userScope = UserScope.Global;
LeaderBoardEntry[] resultingEntries = null;
lb.LoadScores(ok =>
{
if (ok) {
resultingEntries = new LeaderBoardEntry[lb.scores.Length];
LoadUsersAndDisplay(lbID,lb,resultingEntries);
}
else {
Debug.Log("Error retrieving leaderboardi");
}
});
Debug.Log ("Have " + observers.Count + " lbObservers");
}
У меня есть следующий вывод, когда я печатаю полученную таблицу лидеров:
>>Leaderboard loading: Quick Reaction Mode World Ranking count = 1
>>I/Unity (16088): 45 by firatercis
Но когда я показываю все оценки времени для глобальных пользователей, у меня есть следующий снимок экрана:
Во-первых, табло было пустым, я набрал 45 очков. Я видел 45 точек в обеих сторонах, и проблем не было. Затем я набрал 50. Но результат, который я достиг API, никогда не обновляется.
Я удалил и переустановил игру, нет. Я очистил кэш приложения, и не должно быть никакой копии номера 45 в любом месте, но я постоянно получаю 45 баллов с помощью API. Пожалуйста, помогите, где я могу быть неправ?