gpt4 book ai didi

c# - Unity WWW webrequest没有执行

转载 作者:行者123 更新时间:2023-11-30 23:01:34 24 4
gpt4 key购买 nike

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

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.UrlData函数是协程函数。您必须使用 StartCoroutine 来调用它,而不是像普通函数那样直接调用它。所以,UrlData(uriString); 应该是 StartCoroutine(UrlData(uriString));

2。在访问 WWW.text 属性之前,您必须放弃或等待 WWW 请求完成。那应该是 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。您似乎希望 GetDBValues 返回 UrlData 函数的结果。如果这是真的,那么只需将 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);
}));

关于c# - Unity WWW webrequest没有执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51000758/

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