定时器,从零开始,在第10秒结束,第10秒定时器后应为0

时间:2016-08-24 10:31:30

标签: c# unity3d timer

if (coinMag == true) 
{

Timer += 1 * Time.deltaTime;

                if (Timer >= 10) 
                {

                   coinMag = false;
                    Timer = 0;
                }
            }

我想要的是当CoinMag为真时,计时器应该启动...我已将初始化计时器作为公共浮动Timer=0.0f; ..定时器在10秒后正好启动后,定时器应重新初始化为0。

2 个答案:

答案 0 :(得分:1)

使用此coroutine

IEnumerator Timer(float duration,Action callBack = null)
{
    float elapsedTime = 0.0f;
    while (elapsedTime < duration)
    {
        yield return null;
        elapsedTime += Time.deltaTime ;
    }

    if (callBack != null)
    {
        callBack();
    }
}

如下:

StartCoroutine(Timer(10,()=>{Debug.Log("After 10 seconds");}));

答案 1 :(得分:0)

如果您需要公开计时器值(除了在计时器到期时运行方法),您可以这样做:

 private BackgroundWorker timer = new BackgroundWorker();
    public void initialize()
    {
        timer.DoWork += doTimer;
        timer.RunWorkerAsync();
    }
    public double milliseconds_Remaining = 0;
    public double milliseconds_Transpired = 0;
    private void doTimer(object sender, DoWorkEventArgs e)
    {
        bool isRunning = true;
        DateTime begin = DateTime.Now;
        while (isRunning)
        {
            //update times
            double milliseconds = DateTime.Now.Subtract(begin).TotalMilliseconds;
            milliseconds_Remaining = 10000 - milliseconds;
            milliseconds_Transpired = milliseconds;
            if (milliseconds >= 10000)
            {

                //activate timer function

                //reset 
                begin = DateTime.Now;
            }
            System.Threading.Thread.Sleep(250);//or 500 or 50 depending on accuracy needed

        }
    }