1: 为什么我们要自己造轮子来做定时器系统
(由于篇幅有限,没有办法把详细代码的讲解一遍,为此我还提供了本文对应的代码与视频讲解)
视频教程:打造Unity定时器框架 代码素材:unity学习交流小组
传统的Unity做定时器的方式有三种,总结如下:
(1) 在组件类里面定义一个变量,每次Update的时候,累积时间,当时间到达特定的阈值时, 触发函数调用。
void Update() {
float dt = Time.deltaTime;
this.passedTime += dt;
if(this.passedTime >= 阈值) {
doSomeThing();
this.passedTime -= 阈值;
}
}
(2) 使用协程,来做定时器等待。
yeild return new WaitForSecond(5.0f);
// 5秒后做相关的事情
doSomeThing();
(3) 组件类MonoBehaviour 接口 Invoke,来做定时器 this.Invoke("doSomeThing", 5);
上面三种方法都有自己的缺点,第(1)(2)种使用起来不方便, 第(3)种节点隐藏后不方便触发,不方便掉其他代码里面的回调函数,不方便传递参数。
所以我们在项目里面决定自己造轮子,来打造一个Timer模块,处理游戏种的各种定时器需求。
2: 定时器系统的核心原理是什么?
每个定时器对象是一个Timer, 添加的时候交给定时器管理系统, 定时器系统负责管理所有的定时器对象,每次游戏Update的时候,遍历里面的每个定时器对象,
308



被折叠的 条评论
为什么被折叠?



