Вероятно, лучше, если вы переписываете код с использованием сопрограммы,
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
}
, также нет необходимости в таймере + = Time.deltaTime - это значение всегда доступно как Time.time