/****************************************************
文件:TimeTask.cs
作者:唐孝辉 邮箱: 1351105506@qq.com
日期:#CreateTime#
功能:任务类
*****************************************************/
using System;
/// <summary>
/// 时间类型
/// </summary>
public enum TimeUnit
{
MilliSecond, //毫秒
Second, //秒
Minute, //分钟
Hour,//小时
Day,//天
}
public class TimeTask
{
public Action callBack;
public float destTime;//要达到的时间点
public TimeTask(Action callBack, float destTime,TimeUnit timeUnit)
{
this.callBack = callBack;
this.destTime = destTime;
}
}
/****************************************************
文件:TimeSys.cs
作者:唐孝辉 邮箱: 1351105506@qq.com
日期:#CreateTime#
功能:定时系统
*****************************************************/
using System;
using System.Collections.Generic;
using UnityEngine;
public class TimerSys : MonoBehaviour
{
private List<TimeTask> cacheTaskList=new List<TimeTask>(); //缓存
private List<TimeTask> taskList=new List<TimeTask>();
void Update()
{
foreach (TimeTask task in cacheTaskList)
{
taskList.Add(task);
}
cacheTaskList.Clear();
for (int i = 0; i < taskList.Count; i++)
{
TimeTask timeTask = taskList[i];
//判断是否足条件
if (Time.realtimeSinceStartup*1000<timeTask.destTime)
{
continue;
}
else
{
//执行任务
if (timeTask.callBack!=null)
{
timeTask.callBack.Invoke();
}
//任务完成移除任务
taskList.RemoveAt(i);
i--;
}
}
}
//默认是毫秒
public void AddTimeTask(Action callBack,float delayTime,TimeUnit type=TimeUnit.MilliSecond)
{
if (type != TimeUnit.MilliSecond)
{
switch (type)
{
case TimeUnit.Second:
delayTime = 1000 * delayTime;
break;
case TimeUnit.Minute:
delayTime = delayTime * 1000 * 60;
break;
case TimeUnit.Hour:
delayTime = delayTime * 1000 * 60 * 60;
break;
case TimeUnit.Day:
delayTime = delayTime * 1000 * 60 * 60 * 24;
break;
}
}
TimeTask timeTask=new TimeTask(callBack,delayTime+Time.realtimeSinceStartup*1000,type);
//添加到缓存任务里
cacheTaskList.Add(timeTask);
}
}
/****************************************************
文件:GameRoot.cs
作者:唐孝辉 邮箱: 1351105506@qq.com
日期:#CreateTime#
功能:GameRoot
*****************************************************/
using System.Collections.Generic;
using UnityEngine;
public class GameRoot : MonoBehaviour
{
private TimerSys timerSys;
void Start()
{
timerSys = this.GetComponent<TimerSys>();
}
//开始任务
public void ClickTaskBtn()
{
timerSys.AddTimeTask(()=>{Debug.Log("TestA"); },2000);
}
}