Pause zwischen den schüssen?
Ich mach gerade einen kleinen Shooter in Unity und möchte das man nur jede Sekunde einmal schießen kann.
Wie kann ich das machen?
Wenn ich es mit Thread.Sleep(0); bricht nur die Framerate ein.
Vielen Dank <3
3 Antworten
![](https://images.gutefrage.net/media/user/OctoMan/1562599040831_nmmslarge__0_0_1024_1024_3ee6d102f9fff3b8eb89a9336cca61ab.png?v=1562599041000)
Wie schon jemand zuvor schrieb erstelle einfach 2 floats.
float delay = 1f;
float counter = 0f;
Jetzt zählst du den counter permanent hoch.
counter += Time.deltaTime;
Und anschließend checkst du einfach gegen ob der counter höher als der delay ist.
if(counter>= delay)
Dann instantiierst du den Schuss und setzt counter wieder auf 0;
counter = 0;
Sollte es eher eine Dauerfunktion sein wo automatisch geschossen wird, empfiehlt sich eher eine Co-Routine.
![](https://images.gutefrage.net/media/user/OctoMan/1562599040831_nmmslarge__0_0_1024_1024_3ee6d102f9fff3b8eb89a9336cca61ab.png?v=1562599041000)
Das ist vollkommen normal, jeder fängt mal klein an. Suche dir am besten Basic Tutorials und arbeite die Schritt für Schritt durch. Bücher helfen auch.
Nutze in jedem Fall auch die Unity Scripting Reference, da gibt es eine Menge Infos.
![](https://images.gutefrage.net/media/user/Functional/1676159504902_nmmslarge__0_0_960_960_e2ac34e1b18f19102f515d8e9bd9a8ba.jpg?v=1676159505000)
Wenn du Thread.Sleep() verwendest, schläft das gesamte Programm (bzw. der gesamte Thread) ein. Klar, dass es da zu "Framerateeinbrüchen" kommt - das Programm macht in dieser Zeit nichts.
Eine Lösung wäre eine globale Variable, z.B. "lastShotOn", zu definieren, und in dieser die Zeit / den Timestamp zu hinterlegen, wann das letzte Mal geschossen wurde. Wenn der Nutzer dann wieder schießen will, wird überprüft ob seit diesem Timestamp eine Sekunde vergangen ist. Falls ja, wird geschossen und der Timestamp neu gesetzt, falls nein, passiert eben nichts.
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
![](https://images.gutefrage.net/media/user/Ecaflip/1568983541297_nmmslarge__82_18_325_325_c2d8ea08570e05a6058e64957c3e9ea1.jpg?v=1568983541000)
Du könntest eine globale Variable x machen und in update() immer überprüfen, ob in der letzten Sekunde gefeuert wurde, indem du x auf wahr setzt, wenn du feuerst und auf falsch, wenn x die ganze letzte Sekunde in update() immer wahr war.
Allerdings gibt es für solche Zwecke doch sicherlich schon Fragen, oder?
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
Wie würde das in einem Script aussehen?
Habe erst gestern mit Programmieren begonnen
Vielen Dank habe gestern erst begonnen und ist für mich noch etwas schwierig :)