提问者:小点点

在固定时间后执行if语句


我不知道这是不是一个容易的问题。

我正在尝试编写一个单一的函数,使播放器变慢,并在一定时间后使它们恢复到正常速度。我在网上找到了一些答案,但它们都使用第二个函数来设置计时器,但我试图将整个内容包含在一个函数中。

我已经试过了:

public void slowDown(float slowAmount, float durationSlowed)
{
        var playerInfo = player.GetComponent<FPSMovement>();
        playerInfo.speed *= slowAmount;

        float lengthSlowed = Time.time + durationSlowed;

        if(Time.time > lengthSlowed)
        {
                playerInfo.speed /= slowAmount;
        }
}

并用:

slowDown (0.5f, 2f)

它设法减慢玩家的速度,但不能使他们的速度恢复正常。我错过了什么?


共1个答案

匿名用户

我想这就是团结。

您可能希望使用枚举器和协同项来执行此操作。它们将要执行的代码分布在多个帧上。像这样的东西:

IEnumerator SpeedUp() {
  speed *= 2;
  yield return new WaitForSeconds(2.0f);
  speed /= 2;
}

void Update (){
  if(Input.GetKeyDown(***YOUR KEY HERE***)) {
    StartCoroutine(SpeedUp());
  }
}

这会使你的角色速度加倍,等待2秒,减半。如果你想在你可以增加速度的次数上增加一个冷却时间,只需删除一个布尔检查即可。