我不知道这是不是一个容易的问题。
我正在尝试编写一个单一的函数,使播放器变慢,并在一定时间后使它们恢复到正常速度。我在网上找到了一些答案,但它们都使用第二个函数来设置计时器,但我试图将整个内容包含在一个函数中。
我已经试过了:
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)
它设法减慢玩家的速度,但不能使他们的速度恢复正常。我错过了什么?
我想这就是团结。
您可能希望使用枚举器和协同项来执行此操作。它们将要执行的代码分布在多个帧上。像这样的东西:
IEnumerator SpeedUp() {
speed *= 2;
yield return new WaitForSeconds(2.0f);
speed /= 2;
}
void Update (){
if(Input.GetKeyDown(***YOUR KEY HERE***)) {
StartCoroutine(SpeedUp());
}
}
这会使你的角色速度加倍,等待2秒,减半。如果你想在你可以增加速度的次数上增加一个冷却时间,只需删除一个布尔检查即可。