Не могу понять, где разместить ожидание в единстве - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь сделать сценарий стрельбы для игрока, чтобы он перезаряжался каждый раз, когда боеприпасы меньше 1, мне нужно подождать, когда это произойдет, затем позволить игроку снова стрелять, но я не знаю как.Я пытался иметь переменную reload = 1 каждый раз, когда боеприпасы меньше 1, а затем перезагружать обратно через 0 через определенное количество секунд.Я знаю, как сделать так, чтобы вы не могли стрелять, если перезагрузка равна 1, но я не могу понять, как добавить ожидание.

https://paste.ubuntu.com/p/qjNyXxTrj8/

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Вероятно, лучше, если вы переписываете код с использованием сопрограммы,

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

0 голосов
/ 05 февраля 2019

В вашем методе перезагрузки вы можете запустить сопрограмму, которая будет ждать несколько секунд, прежде чем повернуть переменную reload к исходному значению.

private IEnumerator WaitForFewSeconds()
{
  yield return new WaitForSeconds(2);
  reload = 0;
}

void Reload()
{
  // do your thing
  StartCoroutine(WaitForFewSeconds());
}
...