计时器
计时器的作用嘛就是简单的计时了,说白了就是一段时间一直减就行了,简单的代码如下。我们可以放在Update里面计时,同时我们也可以通过携程来计时,代码如下:
private void Update()
{
totalTime -= Time.deltaTime;
if (totalTime <= 0)
{
//todo:计时结束
}
}
这是放在Update里面的那种还有·另外一种:
private float totalTime1 = 4;
private IEnumerator Do()
{
while (true)
{
totalTime1 -= Time.deltaTime;
if (totalTime1 <= 0)
{
//todo:计时结束
yield break;
}
yield return null;
}
}
后面一种通过携程来实现的 同样都比较简单,如果我们需要对一个拾取的加速道具计时的话,我们需要写一个speedTotalTime。如果再拾取一个无敌道具我们岂不是又要在这个类中添加另外一个变量么,要是这样写下去这个类就会变得很乱了么,所以写计时器的目的是为了能够让他变成一个工具,耦合性变得最低,这样所有需要用到计时器的项目都可以用到它,这里我们建一个基本的Timer类
public class Timer
{
public float Duration;
public float LeftTime;
private Action _updateAction;
private Action _callAction;
private bool _isPause;
public Timer(float duration,Action updateAction=null,Action callAction=null,Action intiAction = null)
{
LeftTime = duration;
Duration = duration;
if (intiAction != null) intiAction.Invoke();
_updateAction = updateAction;
_callAction = callAction;
_isPause = false;
}
public void OnUpdate(float deltaTime)
{
LeftTime -= deltaTime;
if (LeftTime <= 0)
{
if (_callAction != null)
_callAction.Invoke();
}
else
{
if (_updateAction != null && !_isPause)
_updateAction.Invoke();
}
}
public void SetTimerTrick(bool b)
{
_isPause = b;
}
}