我正在为Windows Store平台(Universal 10 SDK)构建一个统一的应用程序(5.4.0f3)。 我将在hololens上运行它。
我在编译脚本时遇到问题,这似乎是由于我正在使用的WebClient类。我也试过在另一篇文章中推荐使用HttpClient,但没有运气。我看到有些人在Unity中使用WebClient类成功构建,但我猜他们没有为Windows Store构建。
我得到的编译错误: 错误CS0246:找不到类型或命名空间名称“WebClient”(您是否缺少using指令或程序集引用?) “webClient”这个名称在当前上下文中不存在
我刚刚开始使用Unity,但我相信我可以在使用WebClient的代码周围添加一些指令,或者声明一个新的WebClient,这样它仍然可以编译并能够在hololens上运行。
我找到了“平台相关编译”页面(https://docs.unity3d.com/Manual/PlatformDependentCompilation.html),这似乎解释了这一点。
我尝试使用其中的一些(例如UNITY_WSA,UNITY_WSA_10_0等),但没有运气。我目前正以下列方式使用yahoo finance API:webClient.DownloadFile(url, stockFile);
下载.csv
文件。
有什么建议吗?
答案 0 :(得分:0)
我注意到您使用了WebClient.DownloadFile
。你应该不使用DownloadFile
函数,因为这将等待文件完成下载之后。这次会发生什么,因为主线程被阻止,UI将被冻结。
如果您想使用WebClient
API,则应使用DownloadFileAsync
函数。 Here是如何做到这一点的一个例子。
您可以在Hololens以外的平台上使用WebClient
。然后,您可以在hololens上使用WWW
或UnityWebRequest
,然后在完成下载后使用File.WriteAllBytes
保存文件。
伪代码应如下所示:
#if !UNITY_WSA_10_0
WebClient API
#else
WWW API
#endif
完整代码:
string url = "http://www.yourUrl.com";
string savePath = Path.Combine(Application.dataPath, "file.txt");
int downloadID = 0;
#if !UNITY_WSA_10_0
//Will be used on Platforms other than Hololens
void downloadFile()
{
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(DoSomethingOnFinish);
webClient.QueryString.Add("fileName", downloadID.ToString());
Uri uri = new Uri(url);
webClient.DownloadFileAsync(uri, savePath);
downloadID++;
}
void DoSomethingOnFinish(object sender, AsyncCompletedEventArgs e)
{
string myFileNameID = ((System.Net.WebClient)(sender)).QueryString["fileName"];
}
#else
//Will be used on Hololens
void downloadFile()
{
StartCoroutine(downloadFileCOR());
}
IEnumerator downloadFileCOR()
{
WWW www = new WWW(url);
yield return www;
Debug.Log("Finished Downloading file");
byte[] yourBytes = www.bytes;
//Now Save it
System.IO.File.WriteAllBytes(savePath, yourBytes);
}
#endif
<强>用法强>:
downloadFile();
如果仍然出现错误,那么您还使用了Hololens不支持的命名空间。你也应该处理好这个问题。让我们知道名字是System.Net;
,你可以像下面这样解决它:
#if !UNITY_WSA_10_0
using System.Net;
#endif
答案 1 :(得分:0)
正如程序员在他的回答中提到的,在HoloLens平台上不存在webclient,除了滚动自己,因为他建议另一种选择是使用Unity资源商店中可用的客户端之一。我知道在HoloLens工作的一对夫妇是:
最佳HTTP
https://www.assetstore.unity3d.com/en/#!/content/10765
Uniweb
https://www.assetstore.unity3d.com/en/#!/content/40505
资产商店还有很多其他产品,但这些是我在HoloLens上试过的两种产品。