2015-06-20 95 views
0

我正尝试使用Unity的parse api创建一个新帐户,并且遇到各种麻烦。我想要做的就是在解析上创建一个帐户。然后在成功加载一个场景。使用Unity3D在Parse上创建帐户

这是用于创建新帐户的代码。

bool success = true; 
string error; 
try 
{ 
    Task signup = user.SignUpAsync().ContinueWith(t => 
    { 
     if (t.IsFaulted || t.IsCanceled) 
     { 
      success = false; 
     } 
    }); 
} 
catch (System.Exception e) 
{ 
    error = "Failed to sign up Parse User. Reason: " + e.Message; 
    success = false; 
} 

if(success) 
    Application.LoadLevel("ExampleScene"); 

我不会发布所有我尝试过的东西,因为我尝试了很多东西。

总是会出现的主要问题:

  • 代码是异步所以它不会等待要创建 账户都没有。
  • 如果我使用IEnumerator来等待它失败,因为它不能产生一个 try catch。
  • 即使我试试看,Unity抱怨LoadLevel 不能从主线程调用。
  • 我试过传递一个回调。对于ContinueWith调用,但仍然 抱怨从主线程调用加载。

所以它归结为我无法弄清楚如何在不禁用所有Unity功能的情况下等待任务完成。

我该如何去创建一个解析帐户并在完成时得到通知,然后再次调用Unity函数?

回答

1

你可以得到你的任务是这样这种情况:

private IEnumerator SignUpHandler() 
{ 
    bool success = true; 
    string error; 

    Task signup = user.SignUpAsync();//.ContinueWith(t => 
    while (!signup.IsCompleted) yield return null; 
    if (signup.IsFaulted || signup.IsCanceled) 
    { 
     //Debug.Log("Error " + signup.Exception.Message); 
     error = "Failed to sign up Parse User. Reason: " + signup.Exception.Message; 
     success = false; 
    } 
    else 
    { 
     Debug.Log("Done"); 
     Application.LoadLevel("ExampleScene"); 
    } 

} 

,并从什么地方像这样打电话给你SignUpHandler:StartCoroutine("SignUpHandler");

+0

那伟大工程,我需要能够尝试赶上屈服线虽然。无论如何要这样做?我可以尝试捕获startcoroutine调用,但似乎没有发现异常。 – marsh

+1

其实你不需要一个try catch块来做这个检查IsFaulted或者IsCancelled是否提供了相同的操作。 [你也可以看看这个帖子来处理错误。](https://www.parse.com/questions/unity-sdk-handling-errors) – nexx

+1

哇,非常感谢。我浪费了这么多时间。希望我可以+1更多。 – marsh