| 特性 | 描述 |
|---|---|
| 多时间源支持 | 支持GameTime/UnscaledTime/RealTime |
| 对象池优化 | 避免GC,提升性能 |
| 线程安全 | 支持多线程添加/移除任务 |
| 任务查找 | 支持ID/回调/目标对象多种查找方式 |
| 生命周期 | 自动初始化,独立于场景生命周期 |
public enum TimerTimeSource {
GameTime, // Time.time (受时间缩放影响)
UnscaledTime, // Time.unscaledTime (不受时间缩放影响)
RealTime // DateTimeOffset.UtcNow (系统真实时间)
}// 延迟执行
Timer.Delay(3f, () => Debug.Log("3秒后执行"));
// 循环执行(无限循环)
Timer.Loop(1f, () => Debug.Log("每秒执行"));
// 带参数的循环任务
Timer.Loop(2f, () => Attack(target), times: 5);Timer.Delay
static long Delay(
float delay,
Action callback,
TimerTimeSource timeSource = TimerTimeSource.GameTime
)-
功能:单次延迟执行
-
参数:
-
delay:延迟时间(秒)
-
callback:无参回调方法
-
timeSource:时间源类型
-
Timer.Loop
static long Loop(
float interval,
Action callback,
TimerTimeSource timeSource = TimerTimeSource.GameTime,
bool immediate = false,
int times = 0
)-
参数:
-
immediate:是否立即执行第一次
-
times:执行次数(0=无限循环)
-
| 方法签名 | 返回类型 | 说明 |
|---|---|---|
Find(long id) |
TimerTask |
通过任务ID查找特定定时任务 |
Find(Action func) |
List<TimerTask> |
查找使用相同回调的所有定时任务 |
Find(object target) |
List<TimerTask> |
查找对象关联的所有定时任务 |
| 方法签名 | 说明 |
|---|---|
Kill(long id) |
终止指定ID的单个定时任务 |
Kill(Action func) |
终止所有使用该回调的定时任务 |
Kill(object target) |
终止对象关联的所有定时任务 |
KillAll() |
终止所有定时任务 |
| `` ` |
关键优化
-
对象池:ConcurrentQueue实现任务复用
-
双缓冲:避免遍历时修改冲突
-
自动排序:按执行时间排序插入
最佳实践
// 不推荐
Timer.Delay(1f, () => Destroy(complexObj));
// 推荐
Timer.Delay(1f, DestroySimple);-
后台计时
-
网络超时检测
-
需要跨暂停的场景
public class Player : MonoBehaviour
{
private long _attackTimer;
void Start() {
// 5秒后开始攻击
_attackTimer = Timer.Delay(5f, StartAttack);
}
void StartAttack() {
// 每2秒攻击一次,共3次
Timer.Loop(2f, Attack, times: 3);
}
void Attack() {
Debug.Log("发动攻击!");
}
void OnDestroy() {
Timer.Kill(this); // 清理所有关联任务
}
}- 协程支持:
Timer.DelayCoroutine(1f, MyCoroutine);- 参数化回调:
Timer.Delay(1f, (arg) => {}, "参数");-
- 通过GitURL安装: https://github.com/badApple001/Timer.git
-
- 或导入UnityPackage: 下载链接
-
- 单元测试案例 下载链接
- 联系作者:[email protected]
- 文档版本:v2.1.0