Сопрограмма не работает во второй раз

#c# #unity3d

#c# #unity3d

Вопрос:

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

 private IEnumerator OpenCloseEyesAnimation()
 {
     if (!isOpenEyesAnimationStarted)
     {
         isOpenEyesAnimationStarted = true;
         openCloseEyes.OpenCloseDoor(); // this work 1st and 2nd time
         yield return new WaitForSeconds(6.0f); // this line don't work 2nd time
         stepNumber  ;
         isOpenEyesAnimationStarted = false;
     }
 }
  

Я вызываю ее один раз внутри функции обновления

введите описание изображения здесь

Комментарии:

1. Где вы вызываете эту функцию?

2. если вы открываете и закрываете меню с помощью -через 6 секунд, это не сработает (bool еще не был сброшен) вы уверены, что либо сбрасываете логическое значение при переходе в главное меню, ЛИБО ждете более 6 секунд, прежде чем перейти в главное меню?

3. @Nestoraj Я вызываю это в обновлении один раз

4. @ParadoxForge Строки перед WaitForSeconds работают, и я жду 6 секунд

5. @dima в первый И второй раз?

Ответ №1:

Вам нужно будет использовать StopCoroutine в нужном месте. Каждый раз, когда вы запускаете сопрограмму, сначала остановите ее.

  private IEnumerator OpenCloseEyesAnimation()
     {
         if (!isOpenEyesAnimationStarted)
         {

             isOpenEyesAnimationStarted = true;
             openCloseEyes.OpenCloseDoor();
             yield return new WaitForSeconds(6.0f); // this line don't work after second launch
             stepNumber  ;
             isOpenEyesAnimationStarted = false;
         }
     }
  

В качестве комментария (@Paradox Forge) Обновите свой код UpdateEvent:

 case 3: 
  StopCoroutine(OpenCloseEyesAnimation());
  isOpenEyesAnimationStarted = false;
  StartCoroutine(OpenCloseEyesAnimation());
  

Комментарии:

1. это не сработает, если isOpenEyesAnimationStarted по-прежнему установлено значение true при вызове во второй раз

2. нет, это не помогло, и isOpenEyesAnimationStarted = false . Строка перед WaitForSeconds работает во второй раз

3. @dima это помогло?

4. @MohammadFaizanKhan извините, я попробую через несколько минут

5. Когда я включил меню паузы для перехода в главное меню, я установил Time.timeScale = 0. И это было == 0 после второго запуска. Это была проблема)