Unity Timer zurücksetzen?
Ich habe in einer Szene einen Timer der wenn man durchs Ziel fährt Stoppt (Es wird dann eine Finish Nachricht generiert). Wenn man dann aber die Szene neu startet läuft der Timer einfach weiter. Wie macht man es dass er wieder bei Null startet?
Danke für jegliche Hilfe, hier ist mein Script: (konnte es leider nicht als Bild reinmachen)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Timernew : MonoBehaviour
{
public Text timerText;
float startTime;
private bool finnished = false;
// Start is called before the first frame update
void Start()
{
finnished = false;
startTime = 0;
}
// Update is called once per frame
void Update()
{
if (finnished)
return;
float t = Time.time + startTime;
string minutes = ((int)t / 60).ToString();
string seconds = (t % 60).ToString("f2");
timerText.text = minutes + ":" + seconds;
}
public void Finnish()
{
finnished = true;
timerText.color = Color.yellow;
}
}
1 Antwort
Wenn man dann aber die Szene neu startet läuft der Timer einfach weiter.
Liegt ja an der finished bool. Wenn der false ist (siehe Start()) und du das zu dem noch in der Update() ist das kein Wunder, oder?
Wie macht man es dass er wieder bei Null startet?
Wenn man die funktion von Time.time ansieht, stellt man folgendes fest:
https://docs.unity3d.com/ScriptReference/Time-time.html
float t = Time.time + startTime;
Time.time ist die Zeit des derzeitigen Frames. Zu dem ist deine addierte startTime immer 0 somit ist float t immer Framezeit.
Somit wird bei dem restart deiner Scene nichts verändert und läuft einfach weiter.
Lösung?
Es gibt einige!
void Start()
{
startTime = Time.time;
}
In Update()
float t = Time.time - startTime;
Auch wenn ich das persönlich so nicht machen würde.
Ich würde das eher in eine Co-Routine machen, da kann man dann besser steuern, wann er starten und stoppen soll etc.