目录
一:介绍
二:计时器Timer类的编写
三:计时器管理TimerManager类的编写
四:使用方法
一:介绍这里我们使用List来管理定义的所有计时器Timer,首先就是需要构建计时器的完整逻辑,包括计时器结束后需要执行的事件逻辑OnFinished,以及这个计时器的生命周期delyaTime,结束的时间点finishTime,包括当前计时器是否是循环执行isLoop,以及当前计时器是否结束的标签isFinish
每当我们需要定义新的计时器的时候就生成新的计时器并添加进表里,实时去判断当前计时器是否结束并维护这个list。
二:计时器Timer类的编写 public class Timer
{
private Action OnFinished;
private float finishTime;
private float delyaTime;
private bool isLoop;
private bool isFinish;
public Timer(Action onFinished, float delyaTime, bool isLoop)
{
OnFinished = onFinished;
this.finishTime = Time.time + delyaTime;
this.delyaTime = delyaTime;
this.isLoop = isLoop;
this.isFinish = false;
}
public bool IsFinish => isFinish;
public void StopTimer() => isFinish = false;
public void UpdataTimer()
{
if (isFinish) return;
if (Time.time < finishTime) return;
if (!isLoop) StopTimer();
else finishTime = Time.time + delyaTime;
OnFinished?.Invoke();
}
}
三:计时器管理TimerManager类的编写
public class TimerManager : BaseManager
{
private List updateTimersList = new List();
public Timer AddTimer(Action onFinishef, float delayTime, bool isLoop = false)
{
Timer timer = new Timer(onFinishef, delayTime, isLoop);
updateTimersList.Add(timer);
return timer;
}
public void Update()
{
if (updateTimersList.Count == 0) return;
for (int i = 0; i < updateTimersList.Count; i++)
{
if (updateTimersList[i].IsFinish)
{
updateTimersList.RemoveAt(i);
}
else
{
updateTimersList[i].UpdataTimer();
}
}
}
}
四:使用方法
private void Start()
{
TimerManager.Instance.AddTimer(()=>{ Debug.Log("I am Timer001!"); },2,true);
}