Ваши методы выполняются последовательно, но возвращаемые вами результаты возвращаются асинхронно. Это вводит условия гонки в ваш код и является причиной того, что вы видите способ ChangeSceneOnNewPlayer
, выполняемый до того, как вы получили профиль игрока.
Давайте разберем, что происходит в следующих строках (отладка удалена для ясности):
// Both these lines execute synchronously.
PlayFabId = result.PlayFabId;
SessionTicket = result.SessionTicket;
// Here you're invoking a synchronous method, but inside the method
// an asynchronous call is made to PlayFab, and the result will not be immediately
// returned.
GetPlayerProfile();
// Then you immediately call this method, but you haven't waited for the result from
// PlayFab before you make this call.
ChangeSceneOnNewPlayer();
То, что вы хотите, выглядит примерно так:
public PlayerDisplayName;
void Start()
{
OnLoginWithGoogleAccountPlayFab();
}
public void OnLoginWithGoogleAccountPlayFab()
{
PlayFabClientAPI.LoginWithGoogleAccount(new LoginWithGoogleAccountRequest()
{
TitleId = PlayFabSettings.TitleId,
ServerAuthCode = AuthCode,
CreateAccount = true
}, (result) =>
{
PlayFabId = result.PlayFabId;
SessionTicket = result.SessionTicket;
// Get the profile, and specify a callback for when the result is returned
// from PlayFab.
GetPlayerProfile(OnGetPlayerProfile);
}, OnPlayFabError);
}
public void GetPlayerProfile(Action<PlayerDisplayName> onGetPlayerDisplayName)
{
PlayFabClientAPI.GetPlayerProfile(new GetPlayerProfileRequest()
{
PlayFabId = PlayFabId,
ProfileConstraints = new PlayerProfileViewConstraints()
{
ShowDisplayName = true,
}
}, onGetPlayerDisplayName, OnPlayFabError);
}
// This method is used as a callback to your GetPlayerProfile function and is used
// to process the information.
public void OnGetPlayerProfile(PlayerDisplayName playerDisplayName)
{
PlayerDisplayName = playerDisplayName;
if (PlayerDisplayName == null)
{
SceneManager.LoadSceneAsync("New_Player", LoadSceneMode.Single);
}
else
{
SceneManager.LoadSceneAsync("City", LoadSceneMode.Single);
}
}
Это стандартный шаблон при использовании любых вызовов API RESTful.