【问题标题】:The order of command execution in Unity 5 using StartCoroutine / yield return wwwUnity 5中使用StartCoroutine / yield return www的命令执行顺序
【发布时间】:2017-01-02 23:25:38
【问题描述】:

有 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 行,然后是服务器响应。

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

【问题讨论】:

    标签: c# unity3d unity5


    【解决方案1】:

    看看这里:

    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();
        }
    }
    

    希望对你有帮助

    【讨论】:

    • 非常感谢!很有帮助!
    猜你喜欢
    • 2015-11-27
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 2016-02-12
    • 1970-01-01
    相关资源
    最近更新 更多