Я использую Parse SDK для Unity, чтобы получить некоторые файлы и сохранить их в моем каталоге ресурсов. Когда я вызываю parse.findAsync(), он создает другую задачу, и для меня невозможно вызвать WWW для загрузки URL-адреса, полученного из анализа. Мне нужно:Звоните WWW вне основной темы
- Вызов Разбирает
- Получить Синтаксическую информацию
- Вызова 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), либо найдите сторонний инструмент загрузки. – Jerdak
Быстрый вопрос. Как вы планируете использовать загруженные ресурсы, если они не являются частью файлов ресурсов скомпилированных приложений? – Alex
@Alex вы можете загружать изображения во время работы, используя www.LoadImageIntoTexture (texTmp); и это может использоваться для URL-адреса или пути к файлу. или для моделей вы могли бы сделать импортера, подобного этому для среды выполнения. http://wiki.unity3d.com/index.php?title=ObjImporter – Shredder2500