Удерживайте или ждите, пока Coroutine заканчивает

c# unity3d coroutine

8113 просмотра

2 ответа

842 Репутация автора


В приведенном ниже примере, как я могу получить FinishFirst () для завершения в первую очередь перед запуском DoLast (), сохраняя при этом подпись public void StartPage ()?


Я пытаюсь не заставлять «StartPage ()» возвращать IEnumerator, так как это заставит меня изменить его в интерфейсе. Было бы замечательно, если бы мой интерфейс для StartPage () поддерживал IEnumerator и Void без необходимости реализовывать оба.

public void StartPage()
{
    print("in StartPage()");
    StartCoroutine(FinishFirst(5.0f));
    DoLast();
    print("done");

}    

IEnumerator FinishFirst(float waitTime)
{
    print("in FinishFirst");        
    yield return WaitForSeconds(waitTime);
    print("leave FinishFirst");
}    

void DoLast()
{
    print("do after everything is finished");
}
Автор: user1229895 Источник Размещён: 16.03.2012 03:10

Ответы (2)


0 плюса

3264 Репутация автора

Использование объекта блокировки должно работать:

object lockObject = new object();

public void StartPage()
{
    print("in StartPage()");
    StartCoroutine(FinishFirst(5.0f));
    DoLast();
    print("done");

}    

IEnumerator FinishFirst(float waitTime)
{
    lock(lockObject)
    {
        print("in FinishFirst");        
        yield return WaitForSeconds(waitTime);
        print("leave FinishFirst");
    }
}    

void DoLast()
{
    lock(lockObject)
    {
        print("do after everything is finished");
    }
}
Автор: Mattias Åslund Размещён: 16.03.2012 05:57

0 плюса

38 Репутация автора

Я знаю, что это старый вопрос, но если я правильно понимаю вопрос, что-то вроде этого работает. DoLast () будет запущен в конце подпрограммы.

IEnumerator FinishFirst(float waitTime)
{
    print("in FinishFirst");        
    yield return WaitForSeconds(waitTime);
    print("leave FinishFirst");
    DoLast();
}  

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

Автор: Fausto Размещён: 11.07.2013 04:12
32x32