Unity图像颜色仅在检查员中更改



我基本上有这个功能,所以我可以向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;
}
}));
}

异步任务完成后,我试图更改图像的颜色,但不起作用。这是一个快速视频:https://media.giphy.com/media/fAPTd80taCSq1QRMOd/giphy.gif

问题:

  • 在任务中更改图像的颜色。IsCompleted只在检查器中而不是在游戏视图中更改颜色
  • 我尝试使用Event.Invoke((,但它不起作用
  • 我创建了一个bool,并在任务完成时将其设置为true,在更新中设置图像的颜色,它就可以工作了

你能帮我找到更好的解决方案来解决这个问题吗?

谢谢!

试着使用这样的bool属性(我没有测试它(:

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

设置bool";isComplete";在if语句(task.isCompleted)中为true当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);
}