gpt4 book ai didi

c# - Unity 5中使用StartCoroutine/yield return www的命令执行顺序

转载 作者:行者123 更新时间:2023-11-30 16:01:00 31 4
gpt4 key购买 nike

有 2 个 c# 脚本,附加到同一个游戏对象 (Unity 5.4)

public class SignIn : MonoBehaviour
{
private SendRequest sendRequest;

void Start()
{
sendRequest = GetComponent<SendRequest>();
}

public void signInPressed()
{
WWWForm form = new WWWForm();
form.AddField("key", "value");

sendRequest.POST(mainSettings.appUrl, form);

Debug.Log("SIGNIN");
}
}

    public class SendRequest : MonoBehaviour {

public WWW POST(string url, WWWForm form)
{
WWW www = new WWW(url, form);

StartCoroutine(WaitForRequest(www));
return www;
}

private IEnumerator WaitForRequest(WWW www)
{
yield return www;

if (www.error == null)
{
Debug.Log("WWW Ok!: " + www.text);
}
else
{
Debug.Log("WWW Error: " + www.error);
}
}
}

当我尝试执行这些脚本时,首先显示 SIGNIN 行,然后是服务器响应。

如何先得到服务器的响应,然后再继续程序?我做错了什么?

最佳答案

看这里:

StartCoroutine(WaitForRequest(www));
return www;

您的方法返回 www 对象,无需等待 WaitForRequest(www) 完成。如果您没有使用从 POST() 方法返回的 www 为什么要返回它。

如何解决它:

传递一个 delegate 参数以在 coroutine 完成时触发。

例如:

sendRequest.POST(mainSettings.appUrl, form, () => { Debug.Log("SIGNIN");});

POST()的定义:

public WWW POST(string url, WWWForm form, Action callback = null)
{
WWW www = new WWW(url, form);

StartCoroutine(WaitForRequest(www, callback));
}

WaitForRequest() 的定义:

private IEnumerator WaitForRequest(WWW www, Action callback = null)
{
yield return www;

if (www.error == null)
{
Debug.Log("WWW Ok!: " + www.text);
}
else
{
Debug.Log("WWW Error: " + www.error);
}

if(callback != null)
{
callback();
}
}

希望对你有帮助

关于c# - Unity 5中使用StartCoroutine/yield return www的命令执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39163751/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com