【发布时间】:2014-03-09 17:06:41
【问题描述】:
我正在使用 Parse SDK for Unity 来获取一些文件并保存在我的资源目录中。当我调用 parse.findAsync() 时,它会创建另一个任务,我无法调用 WWW 来下载我从 parse 获得的 URL。我需要:
- 调用解析
- 获取解析信息
- 为我从 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 吗?还是别的什么?
Tks,
【问题讨论】:
-
没有办法。使用
coroutine“异步”运行WWW(与Unity 一样异步)或找到第3 方下载工具。 -
快速提问。如果下载的资源不是已编译的应用程序资源文件的一部分,您打算如何使用它们?
-
@Alex 您可以在运行时使用 www.LoadImageIntoTexture(texTmp); 加载图像并且可以用于 url 或文件路径。或者对于模型,您可以为运行时创建一个像这样的导入器wiki.unity3d.com/index.php?title=ObjImporter
-
@Shredder2500 +1!你每天都会学到新东西:)
标签: c# unity3d parse-platform