Изменение цвета изображения Unity только в инспекторе - PullRequest
0 голосов
/ 11 июля 2020

У меня в основном есть эта функция, поэтому я могу зарегистрировать нового пользователя в Firebase. Регистрация работает нормально, но когда задача завершится, я хотел бы дать игроку обратную связь, но у меня возникли проблемы, ее код:

    public void Registration()
{

    Auth.CreateUserWithEmailAndPasswordAsync("emai2l@gmail.com", "password")
        .ContinueWith((task =>
    {
        if (task.IsCanceled)
        {
            Firebase.FirebaseException e =
            task.Exception.Flatten().InnerExceptions[0] as Firebase.FirebaseException;
            GetAuthError((AuthError)e.ErrorCode);
            return;
        }

        if (task.IsFaulted)
        {
            Firebase.FirebaseException e =
            task.Exception.Flatten().InnerExceptions[0] as Firebase.FirebaseException;
            GetAuthError((AuthError)e.ErrorCode);
            return;
        }

        if (task.IsCompleted)
        {
            Color col = Color.red;
            img.color = col; // COLOR CHANGE


            Debug.Log("Registration Complete");                
            return;
        }

    }));
}

Когда задача asyn c завершена Я Пытаюсь изменить цвет изображения, но не работает ее быстрое видео: https://media.giphy.com/media/fAPTd80taCSq1QRMOd/giphy.gif

ПРОБЛЕМА:

  • Изменение цвета изображения в задаче .IsCompleted цвет меняется только в инспекторе, а не в представлении игры
  • Я пытался использовать Event.Invoke (), но он не работает
  • Я создал bool и установил его в true, когда задача финиширует и в Обновлении установите цвет изображения, и оно работает

Не могли бы вы помочь мне найти лучшее решение для решения этой проблемы?

Спасибо!

1 Ответ

0 голосов
/ 11 июля 2020

Попробуйте использовать такое свойство типа bool (я его не тестировал):

bool isComplete {
set {
if(isComplete) {
Color col = Color.red;
img.color = col; // COLOR CHANGE
Debug.Log("Registration Complete");
      }
   }
}

Установите для bool "isComplete" значение true в операторе if (task.isCompleted) Когда bool имеет значение true, цвет будет изменен.

РЕШЕНИЕ

Итак, в основном, чтобы решить проблему, я использовал Corutine и жду, пока задача не будет завершена и она будет работать нормально! Вот код:

   // Button Event
public void OnRegisterUser()
{
    StartCoroutine(Registration("email@google.com", "12345"));
}

private IEnumerator Registration(string email, string password)
{
    // Create Account Async
    var registrationTask = Auth.CreateUserWithEmailAndPasswordAsync("emaai2dl@gmail.com", "password");
    
    // We wait until the task is Completed
    yield return new WaitUntil(() => registrationTask.IsCompleted);

    // When the task is completed Check for errors
    if(registrationTask.Exception != null)
    {
        Firebase.FirebaseException e =
            registrationTask.Exception.Flatten().InnerExceptions[0] as Firebase.FirebaseException;
        
        // Method to see the type of error          
        GetAuthError((AuthError)e.ErrorCode);

        img.color = Color.red;

    }
    
    // Task is Completed
    else
    {
        Debug.Log("Registration Completed");
        img.color = Color.green;

    }
}

// Check error type
void GetAuthError(AuthError error)
{
    string msg = "";
    msg = error.ToString();

    switch (error)
    {
        case AuthError.AccountExistsWithDifferentCredentials:
            return;

        case AuthError.MissingPassword:
            return;
        case AuthError.MissingEmail:
            return;
        case AuthError.WrongPassword:
            return;
        case AuthError.InvalidEmail:
            return;
    }

    Debug.LogWarning("Registration(): " + msg);

}
...