我试图为玩家制作一个射击脚本,并在弹药小于 1 时重新加载它,每当它发生时,我需要等待一下,然后让玩家再次射击,但我不知道怎么做。我尝试让变量 reload = 1 每次弹药小于 1 时,然后在一定秒后让重新加载变回 0。我知道如何做到这一点,所以如果重新加载等于 1,你就无法射击,但我不知道如何添加等待。
https://paste.ubuntu.com/p/qjNyXxTrj8/
最好使用协程重写代码,
void Start()
{
StartCoroutine(ShootRoutine);
}
IEnumerator ShootRoutine()
{
while (true) // newer exit this loop
{
if (!Input.GetButton ("Fire1")) yield return null; //not shooting, do nothing
else
{
if (ammo>0)
{
Shoot(); // move your ammo decrease here
yield return new WaitForSeconds(delayBetweenShots); // cooldown after shot
}
if (ammo<=0)
{
DisableEffects();
Reload();
yield return new WaitForSeconds(reloadTime);
EnableEffects();
}
}
} // while(true) loops back here
}
此外,不需要 timer+=Time.deltaTime - 此值始终可用作 Time.time
在重新加载方法中,您可以启动一个协程,该协程在将变量变回原始值之前等待几秒钟reload
。
private IEnumerator WaitForFewSeconds()
{
yield return new WaitForSeconds(2);
reload = 0;
}
void Reload()
{
// do your thing
StartCoroutine(WaitForFewSeconds());
}