StartCoroutine для отложенной реакции - PullRequest
0 голосов
/ 19 января 2020

У меня есть объект, которому нужно время, прежде чем он начнет выполняться. Когда он выполняется сразу, он не дает промежуточного времени. У меня есть функция, которая определяет, когда я столкнулся, и теперь я хочу, чтобы что-то произошло через несколько секунд. Если это происходит немедленно, то это не будет гладко.

void OnTriggerEnter2D(Collider2D other)
{
   if (other.tag == "(your tag)")
   {
    //immediate reaction
   }
}

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

1 Ответ

0 голосов
/ 19 января 2020

Много времени можно сделать с помощью функции StartCoroutine (). Затем он отправляется в IEnumerator для обработки. Скажем, вы хотите, чтобы триггер сработал не сразу, а через несколько секунд. Вот наша функция Trigger:

void OnTriggerEnter2D(Collider2D other)
{
   if (other.tag == "(your tag)")
   {
    StartCoroutine(name());
   }
}

в нашем IEnumerator - это то место, где мы ожидаем количество секунд с экземпляром WaitForSeconds (). подождите столько секунд, сколько вы хотите, прежде чем отправить его обратно в действие

IEnumerator name()
{
     yield return new WaitForSeconds(4);
     func();
}

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

void func()
{
//execute four seconds later
}

В целом, выглядит так:

NewBehaviorScript:learning()
{
   void start()
   {
   //N/A
   }
   void Update()
   {
   //N/A
   }

      void OnTriggerEnter2D(Collider2D other)
      {
         if (other.tag == "(your tag)")
         {
          StartCoroutine(NAME());
         }
       }

      IEnumerator NAME()
      {
           yield return new WaitForSeconds(4);
           func();
      }

      void func()
      {
   //execute reaction
      }
}
...