Debug log order is 3-1-2.
Похоже, что PlayFabClientAPI.GetLeaderboard()
выполняется asyn c или в фоновом потоке.
строки
Debug.LogError(topScoreOnLeaderboard); // 3- But here it gives 0.
return topScoreOnLeaderboard;
просто достигнуто до того, как результат действительно пришел.
Вам нужно подождать, пока результат не будет достигнут, чтобы продолжить.
Я бы использовал его, например, через Action<int>
как
public void GetLeaderboardListAsync(Action<int> onResult)
{
var request = new GetLeaderboardRequest();
request.StartPosition = 0;
request.StatisticName = QuizButtonClicked.clickedButtonQuiz.name; // the button that the user has clicked.
request.MaxResultsCount = 20;
PlayFabClientAPI.GetLeaderboard(request, (result) =>
{
var resultValue = result.Leaderboard.ElementAt(0).StatValue;
Debug.Log(resultValue);
onResult?.Invoke(resltValue);
}, (error) =>
{
Debug.LogError(error.GenerateErrorReport());
});
}
А затем вместо этого измените свой код, в котором вы его вызываете, на что-то вроде
GetLeaderboardListAsync(OnLeaderBoardTopAvailable);
private void OnLeaderBoardTopAvailable(int topValue)
{
// Whatever should happen once you have the index
}
Кстати: будьте осторожны с Debug.LogError
, так как это также может помешать выполнению кода в дальнейшем . Скорее используйте Debug.LogWarning
, который всегда продолжает выполнение кода.