Как узнать, когда закончилась подпрограмма, реализуемая несколькими объектами? - PullRequest
0 голосов
/ 11 ноября 2018

В проекте, который я строю в Unity, у меня есть мастер-класс (LevelManager), который проводит: EventManager.TriggerEvent ("Fade");

Несколько объектов, которые прослушивают событие, запускают сопрограмму на 1 секунду, чтобы «исчезнуть» (они понижают свой альфа-канал цвета до 0).

Каков наилучший способ для мастера, который запустил триггер, узнать, что объекты уже исчезли?

1 Ответ

0 голосов
/ 11 ноября 2018

если это фиксированное время, вы можете просто подождать одну секунду, прежде чем продолжить, легко используя асинхронную пустоту.

void Awake() {
    for (int i = 0; i < 100; i++) { CallAllCoroutines += TestA; }
}

void Update() {
    if (Input.GetMouseButtonDown(1)) { MassEventTest(); }
}   

public delegate void CastEvent();
public event CastEvent CallAllCoroutines;

async void MassEventTest() {
    Debug.Log("Invoking event");

    CallAllCoroutines();
    await Task.Delay(1000);

    Debug.Log("Can continue");
}

void TestA() { StartCoroutine(TestCoroutine()); }

IEnumerator TestCoroutine() {
    Debug.Log("Starting Coroutine");

    yield return new WaitForSeconds(1);

    Debug.Log("Ending Coroutine");
}

В противном случае, если вы хотите придерживаться поведения частоты кадров, вам нужно будет хранить список затронутых объектов (тех, для которых была запущена сопрограмма) и проверять их состояние на основе частоты кадров.

...