Unity之简易定时器Timer

有时候我们会有这样的需求:几秒或者几帧之后做什么事,也就是一个定时器。这里我利用Time.realtimeSinceStartup实现了一个简单的秒钟定时器,当然还可以利用Time.frameCount实现一个帧计时器

上代码:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Timer 
{

    private Timer()
    {
        m_timerTask = new List<TimerTask>();
    }

    private static Timer m_instance;

    public static Timer Instance
    {
        get
        {
            if (m_instance == null)
            {
                m_instance = new Timer();
            }
            return m_instance;
        }
    }

    public delegate void OnTimeStart();

    private List<TimerTask> m_timerTask = null;

    public class TimerTask
    {
        //public int Id;
        public float RealTime;
        public float Time;
        //public bool IsLoop;
        //public int LoopCount;
        public OnTimeStart CallBack;
    }

    public void UpdateTimer()
    {
        for (int i = 0; i < m_timerTask.Count; i++)
        {
            TimerTask t = m_timerTask[i];
            if (t == null)
            {
                continue;
            }
            if (t.RealTime < Time.realtimeSinceStartup)
            {
                if (null != t.CallBack)
                {
                    t.CallBack();
                    m_timerTask.Remove(t);
                }
            }
        }
    }

    public void AddTimerTask(float time, OnTimeStart callback)
    {
        if (null == callback)
        {
            return;
        }
        TimerTask t = new TimerTask();
        t.Time = time;
        t.RealTime = Time.realtimeSinceStartup + time;
        t.CallBack = callback;
        m_timerTask.Add(t);
    }
}

上面的代码省略了是否循环、循环次数以及帧计时器,思路类似。
最后附上测试Demo下载地址:
链接:http://pan.baidu.com/s/1bp5xRSr 密码:y35i

下载链接如有失效,请即时联系
以上知识分享,如有错误,欢迎指出,共同学习,共同进步

猜你喜欢

转载自blog.csdn.net/qq_26999509/article/details/76789070