Время начала и окончания игры Unity 3d - PullRequest
0 голосов
/ 09 марта 2020

Я сделал скрипт таймера, который запускает таймер при запуске игры. Это нормально, теперь я хочу, чтобы при нажатии кнопки «CurrentTime» текущее время отображалось в тексте пользовательского интерфейса. Например, игра началась в «24:00» и после 4 минут игры, когда я нажимаю кнопку «CurrentTime», текст UI должен отображать «24:04. Любая помощь? Вот мой код.

public class Timer : MonoBehaviour {
    public int  Hours = 0;
    public int  Minutes = 0;
    public Text    m_text;
    private float   timestart;
    public Text ending;

    void Awake()
    {
        timestart = GetInitialTime();
    }
    void Start () {
        m_text.text = timestart.ToString();
    }

    private void Update()
    {
        if (timestart > 0f)
        {
            //  Update countdown clock
            timestart += Time.deltaTime * 0.25f;
            Hours = GetLeftHours();
            Minutes = GetLeftMinutes();

            //  Show current clock
            if (timestart > 0f)
            {
                m_text.text = Hours + ":" + Minutes.ToString("00");
            }
            else
            {
                //  The countdown clock has finished
                m_text.text = "00:00";
            }
        }
        ending.text = Hours + ":" + Minutes.ToString("00");
    }

    private float GetInitialTime()
    {
        return Hours * 60f + Minutes;
    }

    private int GetLeftHours()
    {
        return Mathf.FloorToInt(timestart / 60f);
    }

    private int GetLeftMinutes()
    {
        return Mathf.FloorToInt(timestart % 60f);
    }
}  

1 Ответ

1 голос
/ 09 марта 2020

Если вам действительно нужно текущее реальное время, оно зависит не от времени запуска приложения, а от самого системного времени.

Тогда все, что вам нужно сделать, это просто использовать System.DataTime и, в частности, DateTime.Now как

using System;

public class Timer : MonoBehaviour
{
    public Text m_text;

    public void GetCurrentTime()
    {
        var time = DateTime.Now;
        m_text.text = $"{time.Hour:00}:{time.Minute:00}";     
    }
}

Вам не понадобится весь остальной сценарий, потому что система сама запускает время.


Если вы хотите получить счетчик, я бы просто сделал что-то вроде

public class Timer : MonoBehaviour
{
    public Text m_text;

    public float Seconds;
    public int Hours;
    public int Minutes;

    private void Start()
    {
        // in case you want to start the timer automatically
        StartTimer();
    }       

    public void StartTimer()
    {
        StopAllCoroutines();
        StartCoroutine(TimerRoutine());
    }

    public void StopTimer()
    {
        StopAllCoroutines();
        GetCurrentTime();
    }

    private IEnumerator TimerRoutine()
    {
        Seconds = 0;
        Hours = 0;
        Minutes = 0;
        while(true)
        {
            Seconds += Time.deltaTime;
            if(Seconds >= 60)
            {
                Seconds -= 60.0f;
                Minutes += 1;
                if(Minutes >= 60)
                {
                    Minutes -= 60;
                    Hours += 1;
                }
            }

            GetCurrentTime();
            yield return null;
        }
    }

    public void GetCurrentTime()
    {
        m_text.text = $"{Hours:00}:{Minutes:00}:{Seconds:00}"
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...