Unity计时器设计 - 基础计时器
在Unity中,Time类的功能较少,例如Time.time在Awake等函数中无法获取,并且没有计时器概念等,大部分项目有计时器的需求,这篇文章将实现一个自己定义的计时器。
在开始写代码之前,先总结需求:
计时器应当具有以下操作:
- 设置计时器
- 开始和取消计时器
- 暂停和继续计时器
- 重置计时器
- 一系列事件(OnStart,OnUpdate,OnCancel,OnEnd等)。
并且具有这些属性:
- 计时器时间:开始、剩余、到时、总时长。
- 计时器状态:未开始,运行中,暂停中。
设计完以上内容后,可以做这些事情:
- 延时函数
- 一切基于时间执行的概念,例如技能,类似cocos2d-x的动作系统等。
- 很多情况下,计时器不希望随挂载对象被销毁时消失,所以Timer不继承于MonoBehaviour。
总结完可以开始写了。
首先,添加引用
using UnityEngine;
using System;
可以运行的最基础的计时器:
//注意不继承于MonoBehavior
public class Timer
{
//开始时间
public float StartTime { get; private set; }
//持续时间
public float Duration { get; private set; }
//结束时间
public float EndTime { get; private set; }
//当前时间
public float CurTime { get; private set; }
//运行标识
public bool IsStart { get; private set; }
//开始和结束事件,这里直接用System.Action(相当于空返回值无参数委托)
public Action OnStart { get; set; }
public Action OnEnd {