斯科特·張伯倫的solution啓動DownloadTextFile是適當和建議辦法做到這一點在Unity因爲WWW
API在後臺處理線程問題。您只需使用協同程序下載它,然後使用像Scott提到的File.WriteAllXXX
函數之一手動保存它。
我添加了這個答案,因爲問題是特別詢問WebClient
,有時候使用WebClient
很好,比如大數據。
問題是您正在產生WebClient
。您不必像您那樣在協同程序中產生WebClient
。只需訂閱將在另一個主題上調用的DownloadFileCompleted
事件即可。爲了使用統一的功能在DownloadFileCompleted
回調函數,你必須使用UnityThread
腳本this崗位,並與UnityThread.executeInUpdate
功能的幫助下完成統一功能..
下面是一個完整的例子(需要UnityThread
):
public Text text;
int fileID = 0;
void Awake()
{
UnityThread.initUnityThread();
}
void Start()
{
string url = "http://www.sample-videos.com/text/Sample-text-file-10kb.txt";
string savePath = Path.Combine(Application.dataPath, "file.txt");
downloadFile(url, savePath);
}
void downloadFile(string fileUrl, string savePath)
{
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(DoSomethingOnFinish);
webClient.QueryString.Add("fileName", fileID.ToString());
Uri uri = new Uri(fileUrl);
webClient.DownloadFileAsync(uri, savePath);
fileID++;
}
//THIS FUNCTION IS CALLED IN ANOTHER THREAD BY WebClient when download is complete
void DoSomethingOnFinish(object sender, AsyncCompletedEventArgs e)
{
string myFileNameID = ((System.Net.WebClient)(sender)).QueryString["fileName"];
Debug.Log("Done downloading file: " + myFileNameID);
//Ssafety use Unity's API in another Thread with the help of UnityThread
UnityThread.executeInUpdate(() =>
{
text.text = "Done downloading file: " + myFileNameID;
});
}
謝謝你這個快速和非常有用的答覆。它工作得很好。 – Chloe
有沒有辦法看到下載進度? – Chloe
是的,如果您查看WWW的文檔,您將看到['progress'](https://docs.unity3d.com/ScriptReference/WWW-progress.html)字段。閱讀,看看進展有多遠。 –