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());
}
}