Функция обратного вызова Unity cra sh при ссылке на игровой объект - PullRequest
0 голосов
/ 28 апреля 2020

Я работаю над 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";

Значение «значение» не сохраняется. Если после этого я проверяю значение, я не вижу значения «значение».

Почему?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...