Unity WWW webrequest未执行

时间:2018-06-23 11:34:31

标签: c# unity3d httpwebrequest

我有一个统一程序,可以根据网络服务器请求的数据来更改其内容。我编写了以下代码来进行网络请求。

public static string[] GetDBValues(int type, string[] data){
    string base_url = "http://localhost/artez/onderzoeks_opdracht/interface_test/get_elements.php";
    string typePrefix = "?type=";
    string dataPrefix = "data[]=";
    string uriString = base_url + typePrefix + type;
    foreach (string dataElement in data){
        uriString += "&" + dataPrefix + dataElement;
    }
    Debug.Log("executing url request");
    UrlData(uriString);
    return new string[] {"a"};
}

public static IEnumerator UrlData(string url){
    Debug.Log("searching the web");
    using (WWW www = new WWW(url)){
        Debug.Log(www.text);
        yield return www.text;
    }
}

此代码可以编译并执行,但是我从未看到以下Debug.Log("searching the web")被记录。所以我相信我的代码永远不会执行最后一部分,为什么会这样呢?
我是C#的新手。

如果不清楚,请告诉我,以便我澄清。

1 个答案:

答案 0 :(得分:2)

您的代码中有很多问题:

1 UrlData函数是协程函数。您必须使用StartCoroutine来调用它,而不是像正常函数那样直接调用它。因此,UrlData(uriString);应该是StartCoroutine(UrlData(uriString));

2 。在访问WWW属性之前,您必须屈服或等待WWW.text请求完成。应该是yield return www而不是yield return www.text

public static IEnumerator UrlData(string url)
{
    Debug.Log("searching the web");
    using (WWW www = new WWW(url))
    {
        yield return www;
        Debug.Log(www.text);
    }
}

3 。您似乎希望GetDBValuesUrlData函数返回结果。如果是这样,则只需将Action作为参数添加到UrlData函数中,以便可以使用它返回结果。

类似这样的东西:

public static IEnumerator UrlData(string url, Action<string> result)
{
    Debug.Log("searching the web");
    using (WWW www = new WWW(url))
    {
        yield return www;
        if (result != null)
            result(www.text);
    }
}

然后按如下所示启动它。结果在result变量中:

StartCoroutine(UrlData("url", (result) =>
{
    Debug.Log(result);
}));