3
我正在使用Parse SDK for Unity來獲取一些文件並保存在我的資源目錄中。當我調用parse.findAsync()時,它會創建另一個任務,我不可能調用WWW來下載我從解析中獲得的URL。我需要:在主線程外調用WWW
- 調用parse
- 獲取解析信息 每個文件我從parse
- 了等待一切完成
- 呼叫WWW;
- 返回結果;
我嘗試這樣做:
public IEnumerator GetXXXAsync(String objectId){
var query = ParseObject.GetQuery("xxx").WhereEqualTo("yyy", ParseObject.
CreateWithoutData("zzz", objectId));
List<String> urlList = new List<String>();
Album album = null;
query.FindAsync().ContinueWith(t =>
{
var tasks = new List<Task>();
Task task = Task.FromResult(0);
foreach (var result in t.Result)
{
ParseObject obj = result;
ParseFile file = (ParseFile)obj.Get<ParseFile>("image");
if(file != null){
urlList.Add(file.Url.ToString());
tasks.Add(GetImageAsync(file.Url.ToString(), "image.png"));
}
}
// finished.
return Task.WhenAll(tasks);
}).Unwrap().ContinueWith(_ =>
{
gameManager.SendOk();
});
return null;
}
private WWW WaitForImage(String url, string filename) {
WWW www = new WWW(url);
while(!www.isDone){
Debug.Log("Waiting");
}
Utils.SaveFileFromTexture(www.texture, (gameManager.GetResourcesPath() + "/Textures/" + filename));
Debug.Log("Saving file ");
return www;
}
public Task<WWW> GetImageAsync(String url, string filename) {
var task = new TaskCompletionSource<WWW>();
Debug.Log("GetImageAsync " + filename);
task.SetResult(WaitForImage(url, filename));
return task.Task;
}
我試圖讓一個IEnumerator的,而不是WWW的,但我總是得到WWW「不能被稱爲主線程之外」。我有什麼可以在主線外調用WWW嗎?還是其他什麼?
韓國社交協會,
沒有辦法解決它。或者使用'coroutine'異步運行'WWW''(與Unity可以異步運行)或者找到第三方下載工具。 – Jerdak
快速問題。如果您不打算編譯的應用程序資源文件的一部分,您打算如何使用下載的資源? – Alex
@Alex你可以使用www.LoadImageIntoTexture(texTmp)在運行時加載圖像;並且可以用於url或文件路徑。或者你可以爲這個模型創建一個像運行時一樣的導入器http://wiki.unity3d.com/index.php?title=ObjImporter – Shredder2500