【问题标题】:Repeating countdown timer unity重复倒计时统一
【发布时间】:2021-10-06 15:50:39
【问题描述】:

我是统一的新手。我的意图是让倒数计时器从 5 秒开始,在它达到零后,我需要从 5 重复重新启动。帮我解决这个谢谢。 我当前的代码:

private bool stopTimer;
[HideInInspector]public float time1;
private float deltaT;

void Start()
{
    stopTimer = false;
    timerSlider.maxValue = gameTime;
    timerSlider.value = gameTime;
    
}

// Update is called once per frame
public void Update()
{
    deltaT = Time.time;
    timerR();

}

public void timerR()
{
    time1 = gameTime - deltaT;
    Debug.Log(time1);
    int minutes = Mathf.FloorToInt(time1 / 60);
    int seconds = Mathf.FloorToInt(time1 - minutes * 60f);




    string textTime = string.Format("{0:0}:{1:00}", minutes, seconds);

    if (time1 <= 0)
    {
        stopTimer = true;
        

    }

    if (stopTimer == false)
    {
        timerText.text = textTime;
        timerSlider.value = time1;
    }
}

}

【问题讨论】:

    标签: c# unity3d timer countdown


    【解决方案1】:

    在这个网页中,您有一个简单的计时器: https://answers.unity.com/questions/351420/simple-timer-1.html 这是我的示例代码:

    float actualtime=0; #Time in the coundownt that we have now
    public float maxtime=5;
    float actualtimedelta=0; 
    string texTime
    void Update()
    {
        actualtime=Time.deltaTime-actualtimedelta
    
       if(actualtime>=5)
       {
         actualtimedelta=Time.deltatime
         textTime ="00:00";
       } 
      else
       { 
         actualtime= maxtime-actualtime;
         int seconds= Mathf.FloorToInt(actualtime);
         int miliseconds=Mathf.FloorToInt((actualtime -seconds)*100)
         texTime=  string.Format("{0:0}:{1:00}", seconds, miliseconds);
       }
    
      
    
    }
    

    【讨论】:

    • 非常感谢您的回复。但是当计时器归零时,我需要再次自动开始倒计时
    • 它们在到达零时重新启动,时间从 0 到 5,但实际时间为 5 到 0,实际时间 = maxtime-actualtime
    【解决方案2】:

    您可以使用 Coroutine 的强大功能以及一些方便的 C# 类,例如 TimeSpanStopwatch,如下代码所示。

       using System;
       using System.Collections;
       using System.Diagnostics;
       using UnityEngine;
       using UnityEngine.UI;
        public class CountDown : MonoBehaviour
        {
            public Text text;
            public int secounds = 5;
            public int waitSecOnEachRound = 1;
            readonly Stopwatch timer = new Stopwatch();
            void Start()
            {
                StartCoroutine(CounDowntStarter());
            }
            IEnumerator CounDowntStarter()
            {
                TimeSpan timeStart = TimeSpan.FromSeconds(secounds);
                while (true)
                {
                    timer.Restart();
                    while (timer.Elapsed.TotalSeconds <= secounds)
                    {
                        yield return new WaitForSeconds(0.01f);
                        timeStart = TimeSpan.FromSeconds(secounds - Math.Floor(timer.Elapsed.TotalSeconds));
                        text.text = string.Format("{0:00} : {1:00}", timeStart.Minutes, timeStart.Seconds);
                    }
                    yield return new WaitForSeconds(waitSecOnEachRound);
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      相关资源
      最近更新 更多