Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity 3d游戏开始和结束时间_C#_Unity3d_Time_Timer - Fatal编程技术网

C# Unity 3d游戏开始和结束时间

C# Unity 3d游戏开始和结束时间,c#,unity3d,time,timer,C#,Unity3d,Time,Timer,我已经做了一个计时器脚本,它在游戏开始时启动计时器。这很好,现在我想要的是当我按下“CurrentTime”按钮时,当前时间应该显示在UI文本上。例如,游戏在“24:00”开始,4分钟后,当我按下“CurrentTime”按钮时,UI文本应显示“24:04。有帮助吗?这是我的代码 public class Timer : MonoBehaviour { public int Hours = 0; public int Minutes = 0; public Text

我已经做了一个计时器脚本,它在游戏开始时启动计时器。这很好,现在我想要的是当我按下“CurrentTime”按钮时,当前时间应该显示在UI文本上。例如,游戏在“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);
    }
}  

如果你真的想要当前的实时数据,它并不取决于应用程序启动的时间,而是取决于系统时间本身

那么你所需要做的就是简单地使用

您根本不需要脚本的其余部分,因为系统本身正在运行


如果你想要的是一个柜台,我会做一些简单的事情

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}"
    }
}

不,我不想要当前时间。游戏时间总是从24:00开始。简单地说,当我开始游戏时,倒计时从0开始到++。当我的车到达终点时,倒计时在5,那么计时器应该停止,ui文本应该显示“5”“@AwaisAhmed这不是你在问题中问的。。。请参阅更新的答案。我希望有帮助
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}"
    }
}