Как запустить несколько корутин в Unity

160
01 марта 2019, 21:50

Всем привет. Начал работать с одним проектом. Создал корутины. Они берут значения с сервера и записывают их в параметры объекта. В чем проблема: мне нужно вызывать их для нескольких объектов, и когда я прописываю их по очереди, происходит так, что одна корутина не успела взять значения с сервера, а вторая уже вызвалась, либо наоборот. Могу ли я сделать так, чтобы корутины вызывались только после того, как завершится предыдущая.

У кого какие варианты? Мне достаточно теории. Код не обязательно. Заранее спасибо.

Answer 1

Конструкция yield return внутри тела IEnumerator является эдакой точкой передачи управления.

Грубо говоря если вы делаете yield return new WaitForSecond(2) - корутина передаёт управление внутрь этого класса и ждёт пока он не закончит свою работу, после чего возвращается и продолжает работу дальше.

Аналогичным образом можно передавать управление и другим корутинам

private void Start()
{
    StartCoroutine(FirstRoutine());
}
IEnumerator FirstRoutine()
{
    yield return null;
    print("Пропущен кадр");
    yield return new WaitForSeconds(1);
    print("Прошла секунда");
    yield return StartCoroutine(SecondRoutine());
    print("Прошло две секунды");
}
IEnumerator SecondRoutine()
{
    yield return new WaitForSeconds(2);
}

В вашем случае будет одна корутина, например, LoadRoutine(), которая последовательно передаёт управление в другие корутины, которые получают и применяют необходимые данные.

READ ALSO
Как деэкранировать строку в c#

Как деэкранировать строку в c#

На вход поступает строка вида : "\\t", которая экранируется как "\t"

179
Приведение к интерфейсу

Приведение к интерфейсу

Есть классПредположим, что у него есть определенные свойства, методы, события

160
Как установить службу Windows из кода?

Как установить службу Windows из кода?

Для WPF приложения нужно в фоновом режиме проверять, загружать и устанавливать обновленияРешил прибегнуть к службам, но хочу реализовать...

188
Process is terminated due to StackOverflowException

Process is terminated due to StackOverflowException

Всем приветМожно сказать я ещё маслёнок, но базовые понятия и костыли пишу

307