Timer / Countdown


Die Erstellung eines einfacheren Timers, welches als Countdown oder auch als Zähler dienen kann. Eine einfache Umwandlung ist möglich.

Das erstellen eines Timers ist sehr einfach umsetzbar in der Unreal Engine 4. Ich habe einen einfachen Weg einfach mal gefunden um sämtliche Spiellogik umzusetzen.



Also Ausgangssituation benutze ich ein frisches Template des Typen "ThirdPerson". Ich lagere meinen Timer oder auch Counter in den Gamemode um, da Gamemode bekanntlich die Regeln des Spieles darstellen sollen, werde ich dort den Timer / Countdown einbinden.

Somit befinde ich mich nun im Gamemode "ThirdPersonGameMode"


Nun muss man überlegen, welche Art von Timer oder Countdown man entwickeln möchte. Möchte man mit Stunden, Minuten und Sekunden arbeiten oder nur Minuten oder nur mit Sekunden? Für jede Zeiteinheit brauchen wir eine neue Variable mit dem Datentyp Integer.

In meinem Fall lege ich jetzt 2 Integer Variablen an. Der erste heißt Minute und der zweite heißt Sekunde.


[Blockierte Grafik: https://unrealengine4.de/index.php?attachment/12328-timer-000-jpg/]


Beide Werte bekommen als Start 0 eingetragen. Wenn man möchte, kann man noch die Value - Range und Slider - Range einstellen bei den einzelnen Variablen.


[Blockierte Grafik: https://unrealengine4.de/index.php?attachment/12329-timer-001-jpg/]


Nun legen wir eine neue Funktion im GameMode an und vergeben diesen einen sinnvollen Namen. Hier als Beispiel "Timer". Wir befinden uns direkt in der Funktion und arbeiten nun in dieser die Logik ab.


[Blockierte Grafik: https://unrealengine4.de/index.php?attachment/12330-timer-002-jpg/]



Nun muss überlegt werden, was man genau machen möchte. Soll der Timer hochzählen oder soll er runterzählen? Ich beginne erstmal mit dem hochzählen und später dann mit dem Countdown - also runterzählen.


Zunächst muss von den "Sekunde" - Variable immer 1 dazu gezählt werden. Dies kann man auf zwei Arten machen. Die erste Art wäre, einfach die Variable + 1 rechnen oder man nutzt die zweite Variante und nutzt den Increment (++).


[Blockierte Grafik: https://unrealengine4.de/index.php?attachment/12331-timer-003-jpg/]


Wir müssen nun in den Value einen Wert rein stecken. Wir nutzen die Sekunde als erstes. Also nehmen wir die Variable "Sekunde" und verbinden es mit dem Increment. Nun würde er in jeden Frame um eins erhöhen die "Sekunde" - Variable. (Gamemode Tick ist auf 1.0 = 1 Sekunde - Standard). Da wir nur Spanne von 0 bis 59 berücksichtigen, muss eine Überprüfung statt finden.


Logischer Ablaufplan: Wenn Sekunde mehr als 59 steht, soll er ...


... genau Minute auf 1 erhöhen. Dazu benötigen wir einen Branch und unsere zweite Variable mit dem Namen "Minute".

Unsere Schritt sieht so aktuell aus:


[Blockierte Grafik: https://unrealengine4.de/index.php?attachment/12332-timer-004-jpg/]


... Nun kann man sich denken, was nun kommt. Richtig, wenn nun "Sekunde" mehr als 59 beträgt, soll "Minute" um einen erhöhen, wenn nicht, dann soll er nichts machen. Also müssen wir aus dem Branch das True raus zuziehen und einen weiteren Increment (++) nutzen, nur finden wir ihn diesmal mit der Variable "Minute". Zuletzt wäre es wichtig, dass man Sekunde auf 0 stellt, weil sonst die Bedingung niemals erreicht werden kann.


Das Endergebnis sieht dann so aus:

[Blockierte Grafik: https://unrealengine4.de/index.php?attachment/12333-timer-005-jpg/]


Das wäre dann der Timer. Wenn man nun Klug ist, kann man noch Stunden hinzufügen, Tage, Monate und Jahre. Also das kann man so weiterspinnen. Es darf nur nicht vergessen werden, immer Bedingungen dazwischen zu schalten.


Wir müssen nun die Timer Funktion im GameMode aufrufen. Das machen wir nicht mit dem Event Tick, sondern mit der Funktion "Set Timer by Function Name". Dieser wird angesteuert von Event Begin und soll mit der "Time" alle 1.0 ausgeführt werden und zusätzlich in dauerhafter Schleife laufen lassen - also schalte "Looping" ein.

Nun musst Du noch den Function Name eintragen. Dieser muss exakt so ausgefüllt werden, wie die Funktion auch heißt.

Wenn das alles getan wurde, sieht es dann so aus:


[Blockierte Grafik: https://unrealengine4.de/index.php?attachment/12334-timer-006-jpg/]


Somit wäre dein Timer nun fertig. Wenn du deinen Timer ausgegeben will in einem Widget, musst du auf diesen Cast To zugreifen und als Referenz den GameMode nehmen wo dein Timer liegt.


Das wäre der Timer ...


Nun kommen wir zum Countdown.


Damit es übersichtlicher ist, werde ich dies in einer extra Funktion auslagern und diese nenne ich dann Countdown.

In der Funktion machen wir fast das selbe, wie oben beim Timer, nur dass die Sekunden / Minuten einen vergeben Wert haben sollen und wir diese immer um 1 minimieren oder besser gesagt zu Decrement (--).


Ich setze nun die Variable "Sekunde" auf 30.


Aktuell sieht es so aus:

[Blockierte Grafik: https://unrealengine4.de/index.php?attachment/12335-coutdown-000-jpg/]


Wieder der aktuelle Stand, soll soll immer einen abgezogen werden von der Variable "Sekunde". Nun wieder der logische Ablauf:


Logischer Ablaufplan: Wenn Sekunde unter 1 ist soll er ...


... richtig - deine Idee ausführen. Also ein Game Over, Straf Schaden am Spieler... Was auch immer. Aber ich mache einfach, dass das Spiel beendet wird.


Also fragen wir mit einem Branch ab, ob die Variable "Sekunde" unter 1 ist, wenn ja dann soll er das Spiel beenden, wenn Nein, soll ich nichts tun.


[Blockierte Grafik: https://unrealengine4.de/index.php?attachment/12337-coutdown-001-jpg/]


Nun muss der Funktionsnamen im Parameter von "Set Timer by Function Name" geändert werden.

Du kannst deinen Timer auch im ausgeben lassen, in dem du einen Print String nutzen tust.


Schon sind wir fertig. Jetzt musst Du nur kreativ sein und weiterarbeiten. :)

Über den Autor

Ich bin der Nico. :)


Komplette Vorstellung kannst du hier finden:

Ich bin der Nico!


Link zum UE4 - Videokurs:

Externer Inhalt www.youtube.com
Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

NiLe Neuling

Kommentare