Я пытаюсь создать пользовательский интерфейс Leaderboard в Unity для Google Play. Я могу получить очки игрока, но не могу назвать имена игроков. Это мой код для получения их обоих:
public void ShowLeaderboards()
{
leaderboardPanel.gameObject.SetActive(true);
PlayGamesPlatform.Instance.LoadScores("MyLeaderboardID",
LeaderboardStart.TopScores,
10,
LeaderboardCollection.Social,
LeaderboardTimeSpan.AllTime,
(LeaderboardScoreData data) =>
{
for (int i = 0; i < data.Scores.Length; i++)
{
PlayGamesScore score = (PlayGamesScore)data.Scores[i];
scoreText.text = score.value.ToString();
}
});
LoadLeaderboard();
}
public void LoadLeaderboard()
{
ILeaderboard lb = PlayGamesPlatform.Instance.CreateLeaderboard();
lb.id = "MyLeadeboardID";
lb.LoadScores(ok =>
{
if (ok)
{
LoadUsersAndDisplay(lb);
}
else
{
Debug.Log("Error retrieving leaderboardi");
}
});
}
internal void LoadUsersAndDisplay(ILeaderboard lb)
{
// 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)
Social.LoadUsers(userIds.ToArray(), (users) =>
{
foreach (IScore score in lb.scores)
{
IUserProfile user = FindUser(users, score.userID);
usersNames.Add(user.userName);
}
});
}
private IUserProfile FindUser(IUserProfile[] users, string userid)
{
foreach (IUserProfile user in users)
{
if (user.id == userid)
{
return user;
}
}
return null;
}
Я проверил и обнаружил, что список userIds пуст после этого foreach (оценка IScore в lb.scores). Почему, когда я могу получить очки? У меня только один балл, я тестирую:)