递归调用buff / unbuff? C#Unity3D

时间:2016-12-01 13:41:25

标签: c# unity3d recursion game-physics

我的目标是进行单次碰撞检测,以降低与特定时间内碰撞的物体的移动速度。

到目前为止我尝试了什么:

{{1}}

所以我想要发生的事情: 如果发生碰撞,则调用Slow-function并使其自行调用,直到持续时间为0.

1 个答案:

答案 0 :(得分:4)

注意,这里的关键是

1。你在另一个对象上有buff / unbuff

你只需要打电话给老板的另一个对象'宾语。不要将实际的buff / unbuff代码放在你的老板的面前。宾语。只是"呼唤一个buff"。

换句话说:总是在你正在抛光/不缓冲的东西上有buff / unbuff代码。

2。对于Unity中的计时器,只需使用" Invoke"或" invokeRepeating"。

真的那么简单。

buff / unbuff很简单:

OnCollision()
  {
  other.GetComponent<SlowDown>().SlowForFiveSeconds();
  }

关于你要减速的物体......

SlowDown()
  {
  void SlowForFiveSeconds()
    {
    speed = slow speed;
    Invoke("NormalSpeed", 5f);
    }
  void NormalSpeed()
    {
    speed = normal speed;
    }
  }

如果你想慢慢放慢它的速度。 - 不要。在电子游戏中无法注意到这一点。

从理论上讲,如果你真的想要慢慢减慢它的速度,那么......

SlowDown()
  {
  void SlowlySlowForFiveSeconds()
    {
    InvokeRepeating("SlowSteps", 0f, .5f);
    Invoke("NormalSpeed", 5f);
    }
  void SlowSteps()
    {
    speed = speed * .9f;
    }
  void NormalSpeed()
    {
    CancelInvoke("SlowSteps");
    speed = normal speed;
    }
  }

就这么简单。