Unity-仅在协程完成后才需要返回值

我正在统一开发游戏,遇到无法解决的问题。我正在通过标准WWW对象并使用协程连接到Web服务器,以便执行POST请求。

代码本身可以工作,但是我需要更新一个变量值,并在协程完成后返回该变量,而我无法这样做。

public int POST(string username, string passw)

{

WWWForm form = new WWWForm();

form.AddField("usr", username);

form.AddField("pass", passw);

WWW www = new WWW(url, form);

StartCoroutine(WaitForRequest(www));

//problem is here !

return success_fail;

}

private IEnumerator WaitForRequest(WWW www)

{

yield return www;

if (www.error == null)

{

if(www.text.Contains("user exists"))

{

success_fail = 2;

}

else

{

success_fail=1;

}

} else {

success_fail=0;

}

}

协程使用相关值更新“ success_fail”的值。但是“返回成功失败”;协程完成之前,POST方法中的代码行会运行,这会导致它返回错误的值。

我尝试使用其他协程,但未成功,假设我也有错误。如何仅在协程完成后才能返回“ success_fail”值?

谢谢。

回答:

只有协程可以等待另一个协程。由于您需要等待启动的协程(WaitForRequest),因此这意味着您必须将POST转换为协程,并且它无法返回int。

看起来success_fail是成员变量,所以如果暴露给启动POST的人(作为协程),则无论如何都不需要返回它。

public int success_fail

IEnumerator POST(string username, string passw)

{

WWWForm form = new WWWForm();

form.AddField("usr", username);

form.AddField("pass", passw);

WWW www = new WWW(url, form);

yield return StartCoroutine(WaitForRequest(www));

}

private IEnumerator WaitForRequest(WWW www)

{

yield return www;

if (www.error == null)

{

if(www.text.Contains("user exists"))

{

success_fail = 2;

}

else

{

success_fail=1;

}

} else {

success_fail=0;

}

}

基本上,如果您希望代码“等待”,则必须是协程。您不能在不阻塞整个引擎的情况下进行等待(没有某种类型的循环攻击)的呼叫。

这个线程提供了一种方法,您可以在需要时从协程返回int,但是POST仍然不能成为阻塞调用…

http://answers.unity3d.com/questions/24640/how-do-i-return-a-value-from-a-

coroutine.html

以上是 Unity-仅在协程完成后才需要返回值 的全部内容, 来源链接: utcz.com/qa/426123.html

回到顶部