Jump to content
Unity Insider Forum

InvokeRepeating ("schuss", 2, 0);


Spike1977

Recommended Posts

InvokeRepeating(a, b, c) ruft die angegebene Funktion a nach b Sekunden auf und wiederholt sie dann alle b Sekunden. Mit Maus gedrückt halten hat das also schon einmal nichts zu tun. Ebensowenig mit einer Einschränkung, die einem erlauben würde, zu warten, bevor eine Aktion erneut ausgeführt werden kann.

InvokeRepeating ist für das, was du willst, überhaupt nicht geeignet. Stattdessen baust du dir selber einen kleinen Timer. Entweder in Update (einfacher) oder mit einer Coroutine (schicker).

Die Update-Variabte sieht etwa so aus:

private float currentCooldown = 0;
public float cooldown = 2;

void Update()
{
  if(currentCooldown <= 0) // Wenn cooldown vorbei
  {
    if(shootKey) // Ersetze durch was anderes
    {
      Shoot(); // Auch ersetzen
      currentCooldown = cooldown; // Starte Cooldown
    }
  }
  else // Wenn cooldown noch nicht vorbei
  {
    currentCooldown -= Time.deltaTime; // Zähle runter
  } 
}

Die Coroutine ungefähr so:

public void cooldown = 2;
private bool canShoot = true;

void Update()
{
  if(canShoot && shootKey)
  {
    Shoot();
    StartCoroutine(Cooldown());
  }
}

private IEnumerator Cooldown()
{
  canShoot = false;
  yield return new WaitForSeconds(cooldown);
  canShoot = true;
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...