2014-01-18 3 views
0

Я хочу, чтобы мой персонаж остановился, когда я нажимаю кнопку на своем геймпаде или клавиатуре. Символ должен делать определенную анимацию, когда я нажимаю кнопку, и ничего больше, поэтому никакого движения вообще, просто анимация. Я пытаюсь понять, как работает WaitForSeconds, но когда я пытаюсь его использовать, это не работает. Вот код функции, которая вызывает WaitForSecondsБез эффектов с WaitForSeconds

public IEnumerator Wait() 
{ 
    yield return new WaitForSeconds (6); 
} 

Когда переменная animationTest BOOL это правда, я хочу, чтобы программа ждать 6 секунд

if (animationTest) 
{ 
    UnityEngine.Debug.Log ("check1"); 
    StartCoroutine (Wait()); 
    UnityEngine.Debug.Log ("check2"); 
    animationTest = false; 
} 

, но это не работает! check1 и check2 печатаются одновременно. Я что-то упускаю. Это работает в FixedUpdate().

+1

Почему вы не публикуете сообщение на http://answers.unity3d.com? – thumbmunkeys

ответ

2

Coroutine не работает так. Он запускает новое (параллельное) выполнение. Чтобы достичь ожидания, вам нужно будет сделать это в IEnumerator.

public IEnumerator SomethingElse() { 
    animationTest = false; 
    Debug.Log("check1"); 
    yield return new WaidForSeconds(6f); 
    Debug.Log("check2"); 
    yield return true; 
} 

void FixedUpdate() { 
    if (animationTest) { 
    StartCoroutine(SomethingElse()); 
    } 
} 

Теперь, когда вы установили animationTest в какой-то момент, вы должны увидеть два бревна с временным промежутком 6 секунд между ними.

+0

Благодарим вас за ответ. Теперь, если я хочу прекратить параллельное выполнение, но поток, из которого я запускаю WaitForSeconds, как я могу это сделать? – Astinog

Смежные вопросы