を呼び出すことによってDownloadTextFileを起動してくださいスコット・チェンバレンのsolutionが適切あるとWWW
APIは、バックグラウンドでのスレッド問題を処理するのではユニティでこれを行うには方法をお勧めします。コルーチンを使用してダウンロードしてから、スコットのようなFile.WriteAllXXX
のいずれかの関数を手動で保存するだけです。
質問は具体的にはWebClient
について質問しており、大きなデータのようにWebClient
を使用している場合がありますので、この回答を追加しています。
問題はあなたがWebClient
を生み出していることです。あなたはあなたのようにコルーチンにWebClient
を与える必要はありません。別のスレッドで呼び出されるDownloadFileCompleted
イベントに登録するだけです。そのDownloadFileCompleted
コールバック関数でユニティ機能を使用するためには、ここで
は完全な例(
UnityThread
が必要とされている)..です
thisポストから
UnityThread
スクリプトを使用して
UnityThread.executeInUpdate
機能の助けを借りてユニティ機能を実行する必要があります。
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)フィールドが表示されます。進歩がどれだけ遠いかを見るためにそれを読んでください。 –