peachplayer Geschrieben 9. Juni 2021 Melden Share Geschrieben 9. Juni 2021 Hallo Leute Ich versuche mit folgendem Script einen Timer zu programmieren. Leider läuft das nicht richtig, d.h. der Timer stoppt gar nicht sondern läuft immer weiter. Woran könnte das liegen? Gruss, Peachplayer using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class mytimer_class : MonoBehaviour { public Button btn1, btn2; bool timerActive = false; float cntdnw = 1.0f; public Text disvar; public DateTime dt; public Date_class Datum_neu; // Use this for initialization void Start() { btn1 = GameObject.Find("start_button").GetComponent<Button>(); btn2 = GameObject.Find("stop_button").GetComponent<Button>(); } public void starttimer() { string timer_stop = Datum_neu.Datum.ToShortDateString(); // dt = new DateTime(2021, 01, 01).AddDays(Convert.ToDouble(timer_stop)); // Debug.Log(timer_stop); btn2.interactable = true; btn1.enabled = true; btn2.enabled = false; timerActive = true; } public void stopptimer() { btn1.interactable = true; btn2.enabled = true; btn1.enabled = false; timerActive = false; string timer_stop = Datum_neu.Datum.ToShortDateString(); disvar.text = Datum_neu.Datum.ToShortDateString(); } // Update is called once per frame void Update() { if (timerActive == true) { cntdnw += Time.deltaTime; double b = System.Math.Round(cntdnw, 2); string dateTimeString = System.String.Format("{0:yyyy-MM-dd-hh}", b); var time = new DateTime(Convert.ToInt64(b)); dt = new DateTime(2021, 01, 01).AddDays(b); Datum_neu.Datum = dt; // PlayerPrefs.SetString("stopped_time", dt.ToShortDateString()); //DateTime dt = DateTime.FromOADate(b); disvar.text = (Datum_neu.Datum.ToString()); Debug.Log(Datum_neu.Datum); } else if (timerActive == false) { disvar.text = "Game stopped...."; disvar.text = Datum_neu.Datum.ToShortDateString(); } } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 10. Juni 2021 Autor Melden Share Geschrieben 10. Juni 2021 using System; using System.Collections; using System.Collections.Generic; using System.Globalization; using UnityEngine; using UnityEngine.UI; public class mytimer_class : MonoBehaviour { float cntdnw = 1.0f; public Text disvar; public Button startButton; public Button stoppButton; private void Start() { startButton = GameObject.Find("start_button").GetComponent<Button>(); stoppButton = GameObject.Find("stopp_button").GetComponent<Button>(); } public void Startbutton() { startButton.enabled = true; stoppButton.enabled = false; } public void Stoppbutton() { stoppButton.enabled = true; startButton.enabled = false; } void Update() { if ((startButton.enabled)) { cntdnw += Time.deltaTime; Time.timeScale = 0.5f; double b = System.Math.Round(cntdnw, 2); string dateTimeString = System.String.Format("{0:yyyy-MM-dd-hh}", b); disvar.text = TimeSpan.FromDays(b).ToString(); } if (stoppButton.enabled) { Debug.Log("game stopped!"); Time.timeScale = 0.0f; } } } Habs nochmals korrigiert, das korrekte Script sieht wie folgt aus. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 10. Juni 2021 Autor Melden Share Geschrieben 10. Juni 2021 Leider funktioniert die Stop-funktion nicht! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 10. Juni 2021 Melden Share Geschrieben 10. Juni 2021 Also wenn ich es richtig interpretiere, dann springst du beim Druck eines Buttons in die Methoden Startbutton() bzw. Stopbutton(). Dein Problem ist, dass du da immer einen Button abschaltest. Und diese Eigenschaft willst du dann als Kriterium in der Update nutzen. Ich gehe davon aus, dass zu Beginn beide Buttons enabled sind, denn sonst würd ja garnichts gehen. Also drückst du den Startbutton und der führt Startbutton() aus. Dort aktivierst du den bereits aktiven Startbutton und dekativierst den Stoppbutton. Da jetzt der Stoppbutton deaktiviert ist, kannst du da drauf drücken wie du willst. Er ist deaktivert und wird nix machen! Also wenn ein Druck auf einen Button einen gewissen Button deaktivieren sollte, dann natürlich den, den man gerade gedrückt hat. Das würde Sinn machen, denn man braucht den ja nur einmal drücken. Der Gegenspieler muss aber aktiv sein, denn sonst kann man ja die Stoppuhr nicht beenden, wenn sie läuft. Genauso will man ja die Stoppuhr wieder starten, wenn sie angehalten wurde. Nimm einfach eine Boolsche Variable die du beim druck auf den Startbutton auf true setzt. Diese nutzt du dann für deinen Timer. Wenn du auf den Stoppbutton drückst setzt du diese Variable wieder auf false zurück. Warum spielst du eigentlich mit der Timescale rum? Das macht doch überhaupt keinen Sinn?! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 10. Juni 2021 Autor Melden Share Geschrieben 10. Juni 2021 danke für die Antwort! Jetzt funktioniert die Stoppfunktion! Gruss, peachplayer 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.