UFL10——计时器模块

Unity自带的计时功能

继承MonoBehaviour​的组件,可以利用

  1. ​Invoke​ 延迟执行逻辑
  2. ​InvokeRepeating​ 间隔一定时间执行逻辑
  3. 协同程序 来计时
  4. ​Update​ 中 自己实现计时功能

为什么要自己制作计时器模块

主要原因:

  1. 使用Unity自带的计时功能,不能为所有类服务(只能继承了 MonoBehaviour​ 才能使用)
  2. 利用协同程序和 Update​ 制作计时功能,如果需要都写,会产生代码冗余(写一堆类似重复的代码)

因此:我们将计时功能统一的进行管理,让所有系统都能够通过计时器模块进行计时

计时器模块的基本原理

想要达到的效果:

  1. 能够延时响应逻辑(比如:10s后执行某一逻辑)
  2. 在延时过程中,可以固定时间间隔响应逻辑(比如:10s后执行某一逻辑,但是10s内每隔1s又能响应其它逻辑)

基本原理:

  1. 定义一个计时器对象,计时器对象记录延时执行时间、间隔执行时间、执行结束回调委托、间隔执行回调委托等等
  2. 计时器模块中统一管理所有计时器对象,每个计时器对象有一个唯一ID,用来区分获取计时器对象
  3. 在计时器模块中利用一个协同程序固定间隔时间进行计时器对象的时间检测
  4. 计时器模块中提供创建计时器、移除计时器、停止计时器、开始计时器、重置计时器的相关方法

主要要实现的类:

  • 计时器模块管理器 TimerManager

    • 需要声明的关键成员

      1. 计时器字典容器
      2. 待移除计时器列表容器

      等等

    • 需要实现的关键方法

      1. 开启计时器管理器
      2. 关闭计时器管理器
      3. 创建单个计时器
      4. 移除单个计时器
      5. 重置单个计时器
      6. 开启单个计时器
      7. 停止单个计时器

      等等

  • 计时器对象类 TimerItem

    • 需要声明的关键成员

      1. 唯一ID
      2. 延时执行回调委托
      3. 间隔执行回到委托
      4. 总时间
      5. 间隔时间
      6. 是否开启

      等等

    • 需要实现的关键方法

      1. 初始化数据
      2. 重置时间

      等等

具体实现

  • TimerItem 具体实现
  • TimeManager 具体实现
  • TimeManager 进阶优化