Unity Countdown Timer erstellen?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Mit is Trigger meinst du Collider.isTrigger?

Einen simplen Timer kannst du mit einem float machen, von dem du deltaTime abziehst. Das ganze mit einer if Abfrage und scgon kannst du auf bools prüfen.

Zum zurücksetzten einfach den float Wert auf den Originalwert setzten.

(Sorry für die Formatierung, bin am Handy)

float timeLeft = 300.0f;
     
       
     void Update()
     {
         If (true) //true mit beliebigen       bool ersetzten
         {
         timeLeft -= Time.deltaTime;
   
         if(timeLeft <= 0)
         {
             //Do Stuff
         }
        }
     }
KnoxPlays 
Fragesteller
 12.02.2021, 00:58

Danke schon mal doch leider würde ich es soweit in etwa auch schaffen mein Problem liegt er darin den Timer zu stoppen bzw zu starten wenn etwas in einem Bereich gehalten wird. Ich möchte es sozusagen so haben das ich ein Objekt in einem Bereich halten muss worauf hin ( auch grafisch sichtbar) ein Timer runter zählt und wenn das Objekt nicht im Bereich ist der Timer halt auch stoppt. Ich hoffe das hat irgendwie Sinn gemacht und ein Eindruck in meine Ideen gegeben

0
Recorsi  12.02.2021, 01:07
@KnoxPlays

Du willst den Timer also mit onTriggerEnter und onTriggerExit starten und stoppen?

Du kannst einfach einen bool deklarieren, der bei onTriggerEnter auf true und bei onTriggerExit auf false gesetzt wird. Dann prüfst du beim Timer, ob der bool true ist.

Wenn er false ist, dann läuft der Code und somit der Timer sowieso nicht weiter.

Falls du den Timer in Minuten und Sekunden anzeigen willst, kannst du timeSpan benutzen:

someText.text = TimeSpan.FromSeconds(timeInSeconds).ToString("mm:ss");
0
KnoxPlays 
Fragesteller
 12.02.2021, 21:36
@KnoxPlays

hallo soweit habe ich es jetzt geschafft: https://prnt.sc/z996sj

nun 2 fragen 1. wird irgendwie nur einmalig ein wert abgezogen es ist also noch kein countdown und 2. wie machen ich es jetzt das er pausiert bei dem exittrigger? liebe grüße

0
KnoxPlays 
Fragesteller
 12.02.2021, 21:42
@Recorsi

zum 1. Punkt noch mal ich bräuchte also glaube ich sozusagen etwas was sozusagen die ganz zeit update damit immer wieder der wert abgezogen wird und eben nicht nur ein malig

0
Recorsi  13.02.2021, 01:22
@KnoxPlays

Mir fällt gerade auf, wenn du den Timer in OnTriggerStay packst müsste der auch ohne bool nur bei Kollision ausgeführt werden

0
KnoxPlays 
Fragesteller
 13.02.2021, 01:39
@Recorsi

ehm ok aber wie mache das jetzt noch das die zeit auch wiederholt abgezogen wird weil bei mir grade wird immer nur 1 kleiner wert abgezogen und sozusagen nicht bis 0 runtergezählt

0
KnoxPlays 
Fragesteller
 13.02.2021, 01:44
@KnoxPlays

ah nvm hat sich alles geklärt danke noch mal

1

In der Programmiersprache A++ würde es so aussehen:

public Script : Countdown Script(class structure)[
//Auf den Projekttimer zugreifen:
#Timer
new = Variable.name _Timer_
project.Timer = <#Timer>.~Countdown~*projectPlay.whith = ? >> "Count"
|forever[function.ever]
//Man kann die Funktion umbennenen, nur das "function.ever" macht, dass das die //forever funktion ist
|
//Countdown runterzählen:
timer.Timer = Countdown.of"3s"
timer.Timer = Countdown.change.per = second.negative
//"timer.Timer = Countdown.change.per = second.negative" = Countdown per Sekunde //runterzählen
//"timer.Timer = Countdown.change.per = second.positive" = Countdown per Sekunde //aufzählen
if(Countdown = 0){
//Mach etwas
Timer = 0
}
|
]
Woher ich das weiß:eigene Erfahrung