Как реализовать реализовать загрузчик ресурса из веба в Unity?

У меня стоит две задачи:

1. Я хочу загружаться текстовый файл из веба, но я не понимаю как написать класс, у которого будет статический метод, который принимает url и в итоге возвращает скаченный контент. А именно мне не понятно как это провернуть с IEnumerator, учитвая, что он ни чего не возвращает наружу при выполнение.

2. Я хотел бы производить загрузку во время инициализации игры. Тестовый файл будет содержать конфиги для всего (скороть движение игрока и т.д.). И на сколько я понимаю, выполнение IEnumerator - это не блокирующая операция. Как реализовать?
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Насчёт статичности это уж вам решать, а вообще проще всего в корутины передавать колбэк:
using UnityEngine;
using System;
using System.Collections;

public class Example : MonoBehaviour
{
    private void Start()
    {
        StartCoroutine(DownloadFile("url", text => DeserializeConfig(text, () => Debug.Log("Done"))));
    }

    private IEnumerator DownloadFile(string url, Action<string> onComplete)
    {
        using (WWW www = new WWW(url))
        {
            yield return www;
            onComplete(www.text);
        }
    }

    private void DeserializeConfig(string text, Action onComplete)
    {
        Debug.Log(text);
        onComplete();
    }
}

При такой схеме очень быстро выстраивается лесенка из вложенных делегатов, но, по крайней мере, она выполняет свою работу. Лучшим решением будет использовать промисы или UniRx, тогда будет проще управлять потоком.

Блокировка IEnumerator зависит от тяжести операций между yield'ами, корутины выполняются в том же самом потоке, они просто позволяют растащить выполнение кода между кадрами.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы