C# 在固定时间后执行if语句

C# 在固定时间后执行if语句,c#,if-statement,C#,If Statement,我不知道这是不是一个简单的问题 我试着编写一个函数来降低播放器的速度,并在一段时间后将其恢复到正常速度。我在网上找到了一些答案,但它们都使用了第二个函数来设置计时器,但我试图将整个过程包含在一个函数中 我已经试过了: public void slowDown(float slowAmount, float durationSlowed) { var playerInfo = player.GetComponent<FPSMovement>(); pla

我不知道这是不是一个简单的问题

我试着编写一个函数来降低播放器的速度,并在一段时间后将其恢复到正常速度。我在网上找到了一些答案,但它们都使用了第二个函数来设置计时器,但我试图将整个过程包含在一个函数中

我已经试过了:

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;
        }
}
它设法使玩家减速,但不会使他们的速度恢复正常。
我在这里遗漏了什么?

我想这就是统一

您可能希望使用IEnumerator和协同程序来实现这一点。它们将要在多个帧上执行的代码分发。大概是这样的:

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

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

这将使角色的速度加倍,等待2秒,然后减半。如果要将冷却时间添加到可以添加速度的次数,只需删除布尔检查。

如果不重置速度,为什么希望重置速度?您可以在If语句中使用for循环,在该循环中除以慢量,直到达到开始速度,并添加延迟。但那不会很漂亮。
IEnumerator SpeedUp() {
  speed *= 2;
  yield return new WaitForSeconds(2.0f);
  speed /= 2;
}

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