Я работаю над Unity 2019, и у меня есть странная вещь с функцией обратного вызова.
Я использую пакет https://github.com/googlesamples/google-signin-unity.
Так что после входа в систему с Google в моем приложении Android обратный вызов OnAuthenticationFinished
запускается с помощью:
GoogleSignIn.DefaultInstance.SignIn().ContinueWith(OnAuthenticationFinished);
internal void OnAuthenticationFinished(Task<GoogleSignInUser> task) {
if (task.IsFaulted) {
// Error
}
else {
// No Error
}
}
Моя проблема в том, что если в обратном вызове OnAuthenticationFinished я ссылаюсь на любой GameObject на моей сцене, приложение может sh , этот пример cra sh my Android app:
internal void OnAuthenticationFinished(Task<GoogleSignInUser> task) {
if (task.IsFaulted) {
MyGameObject.SetActive(true);
}
else {
MyGameObject.SetActive(false);
}
}
Но если я подожду несколько секунд, прежде чем выполнить MyGameObject.SetActive(false);
, все в порядке, с сопрограммой, например:
internal void OnAuthenticationFinished(Task<GoogleSignInUser> task) {
if (task.IsFaulted) {
StartCoroutine(WaitAndError());
}
else {
StartCoroutine(WaitAndLoad));
}
}
IEnumerator WaitAndError()
{
yield return new WaitForSeconds(1);
MyGameObject.SetActive(true);
}
Итак, мой первый вопрос: почему, если я подожду, все в порядке, а приложение не взломает sh?
И почему, если я не подожду, пока приложение cra sh?
Секунд, если в OnAuthenticationFinished
или в сопрограмме я изменяю Экземпляр в своей игре, например, в Player Синглтон с:
Player.Instance.MyField = "value";
Значение «значение» не сохраняется. Если после этого я проверяю значение, я не вижу значения «значение».
Почему?
Спасибо!