【问题标题】:StartCoroutine for delayed reactionStartCoroutine 用于延迟反应
【发布时间】:2020-05-05 10:05:06
【问题描述】:

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

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

在与具有给定标签的对象发生碰撞后,我可以立即做出反应,但我无法在几秒钟后或几秒钟后将某些东西放在轨道上执行?如何为这样的实例设置计时器?

【问题讨论】:

标签: c# unity3d timer delay ienumerator


【解决方案1】:

使用 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
      }
}

【讨论】:

    猜你喜欢
    • 2019-06-07
    • 2019-08-27
    • 2016-01-10
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 2019-02-27
    相关资源
    最近更新 更多