Jump to content
Unity Insider Forum

Timer läuft nicht richtig


peachplayer

Recommended Posts

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

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

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

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...