Spike1977 Geschrieben 6. September 2017 Melden Share Geschrieben 6. September 2017 Hi, kann man das auch umkehren? InvokeRepeating ("schuss", 2, 0); Bei diesem code muss man die linke Maus für 2 Sekunden festhalten und dann passiert der Schuss. Ich will aber das der Schuss sofort passiert und dannach darf er für 2 Sekunden nicht funktionieren. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 6. September 2017 Melden Share Geschrieben 6. September 2017 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 More sharing options...
Spike1977 Geschrieben 9. September 2017 Autor Melden Share Geschrieben 9. September 2017 Danke! Es geht jetzt so. Wunderbar. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.