Unity StartCorountine не просыпается, когда я вызываю его из другого скрипта - PullRequest
0 голосов
/ 08 марта 2020

У меня есть IEnumerator с параметром while l oop, который должен работать 100 раз, и это прекрасно работает, когда я вызываю это из метода start в том же скрипте. Но когда я вызываю IEnumerator из другого скрипта, он вызывается, но пока l oop запускается только один раз.

 public class script1: MonoBehaviour
 {
  private void Start()
     {
         //StartCoroutine(StartCountdown(3));
        // When I call it here the while loop runs 100 
     }
  public IEnumerator StartCountdown(float countdownValue)
     {
         float waiteTime = countdownValue / 100;

         int loopNumber = 100;
         //float idk = 0;
         while (loopNumber > 0)
         {
             Debug.Log("aufgerufen");
             circle.fillAmount -= 0.01f;

             yield return new WaitForSeconds(waiteTime);
             loopNumber -= 1;
         }
     }
 }

 public class script2 : MonoBehaviour
 {
 public void GameOver()
     {

         panel.SetActive(true);
         Time.timeScale = 0;

         GameObject circle = GameObject.FindGameObjectWithTag("LoadCircle");
         StartCoroutine(circle.GetComponent<LoadCircle>().StartCountdown(3));

         //When  I call it from here the while loop only run once
     }
 }

1 Ответ

1 голос
/ 08 марта 2020

Вы используете

Time.timeScale = 0;

, но затем

yield return new WaitForSeconds(waiteTime);

, на который влияет шкала времени!

Приостановляет выполнение сопрограммы на указанное количество секунд, используя масштабированное время.

Реальное время приостановки равно заданному времени, деленному на Time.timeScale

Для шкалы времени = 0 он больше не вызывается вообще.

Вы должны использовать WaitForSecondsRealtime вместо

yield return new WaitForSecondsRealtime(waiteTime);    
...