StartCoroutine用于延迟反应

问题描述 投票:0回答:1

我有一个对象,需要一些时间才能开始执行。当它立即执行时,它之间没有时间。我有一个检测我何时发生碰撞的功能,现在我希望几秒钟后发生一些事情。如果立即发生,那么它将不会很顺利。

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

与具有给定标签的对象发生冲突后,我可以立即做出反应,但是可能在几秒钟后或之后无法执行某些操作?如何为这样的实例设置计时器?

c# unity3d timer delay ienumerator
1个回答
0
投票

使用StartCoroutine()函数可以完成很多计时。然后将其发送到IEnumerator进行处理。假设您希望触发器在几秒钟后立即做出反应。这是我们的触发功能:

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
      }
}
© www.soinside.com 2019 - 2024. All rights reserved.