首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Unity SKFramework框架(四)、Timer 时间类工具

  • 25-03-03 16:42
  • 3241
  • 13644
blog.csdn.net

目录

简介

一、Countdown 定时器(倒计时)

二、Clock 计时器

三、Chronometer 秒表

四、Alarm 闹钟

五、EverySeconds 与 EveryFrames

六、TimeUtility 功用


简介

        Timer模块实现了一系列计时工具,包括定时器(倒计时)、计时器、秒表、闹钟等,它们均继承自接口ITimer,支持启动、暂停、恢复、停止计时等行为。

一、Countdown 定时器(倒计时)

        获取一个定时器可以通过如下方式,计时类工具的运行依赖于携程,通过this获取定时器表示使用当前的MonoBehaviour开启携程,使用Timer获取定时器表示使用计时模块管理器的MonoBehaviour开启携程。

  1. Countdown countdown1 = this.Countdown(5f);
  2. Countdown countdown2 = Timer.Countdown(10f, true);

        第一个参数为float类型,表示定时的时长,第二个参数为bool类型,表示计时是否忽略时间的缩放,默认为false。通过如下方式设置定时器的启动、执行、暂停、恢复、停止事件:

  1. Timer.Countdown(5f)
  2. .OnLaunch(() => Debug.Log("定时器启动"))
  3. .OnExecute(s => Debug.Log(string.Format("剩余时间{0}", s)))
  4. .OnPause(() => Debug.Log("定时器暂停"))
  5. .OnResume(() => Debug.Log("定时器恢复"))
  6. .OnStop(() => Debug.Log("定时器终止"));

Example:

  1. using UnityEngine;
  2. using SK.Framework;
  3. public class Example : MonoBehaviour
  4. {
  5. //定时器
  6. private Countdown countdown;
  7. private void Start()
  8. {
  9. countdown = Timer.Countdown(5f)
  10. .OnLaunch(() => Debug.Log("定时器启动"))
  11. .OnExecute(s => Debug.Log(string.Format("剩余时间{0}", s)))
  12. .OnPause(() => Debug.Log("定时器暂停"))
  13. .OnResume(() => Debug.Log("定时器恢复"))
  14. .OnStop(() => Debug.Log("定时器停止"));
  15. }
  16. private void OnGUI()
  17. {
  18. if (GUILayout.Button("启动", GUILayout.Width(200f), GUILayout.Height(50f)))
  19. {
  20. countdown.Launch();
  21. }
  22. if (GUILayout.Button("暂停", GUILayout.Width(200f), GUILayout.Height(50f)))
  23. {
  24. countdown.Pause();
  25. }
  26. if (GUILayout.Button("恢复", GUILayout.Width(200f), GUILayout.Height(50f)))
  27. {
  28. countdown.Resume();
  29. }
  30. if (GUILayout.Button("终止", GUILayout.Width(200f), GUILayout.Height(50f)))
  31. {
  32. countdown.Stop();
  33. }
  34. }
  35. }

二、Clock 计时器

  1. Clock clock1 = this.Clock();
  2. Clock clock2 = Timer.Clock(true);

        计时器与定时器具有相同的事件,不同的是,定时器为倒计时,例如定时5秒,其值将会从5逐渐到0,到0后自动停止,计时器为正向计时,需要调用Stop手动终止,可以通过StopWhen为其设置停止的条件,当条件满足时,计时器将自动停止。

  1. Timer.Clock()
  2. .OnExecute(s => Debug.Log(string.Format("已经计时{0}", s)))
  3. //设置停止条件 当键盘A按下时 计时器停止
  4. .StopWhen(() => Input.GetKeyDown(KeyCode.A))
  5. .Launch();

三、Chronometer 秒表

  1. Chronometer chronometer1 = this.Chronometer();
  2. Chronometer chronometer2 = Timer.Chronometer(true);

        秒表在计时器的基础上增加了Record记录的功能,当调用Shot方法时,会产生一条记录,记录包含context上下文(object类型)和time时间点:

  1. using UnityEngine;
  2. using SK.Framework;
  3. public class Example : MonoBehaviour
  4. {
  5. //秒表
  6. private Chronometer chronometer;
  7. private void Start()
  8. {
  9. chronometer = this.Chronometer(true);
  10. chronometer.Launch();
  11. }
  12. private void OnGUI()
  13. {
  14. if (GUILayout.Button("Shot", GUILayout.Width(200f), GUILayout.Height(50f)))
  15. {
  16. chronometer.Shot();
  17. }
  18. if (GUILayout.Button("Log", GUILayout.Width(200f), GUILayout.Height(50f)))
  19. {
  20. var records = chronometer.Records;
  21. for (int i = 0; i < records.Count; i++)
  22. {
  23. Debug.Log(string.Format("No.{0}: {1}", i + 1, records[i].time));
  24. }
  25. }
  26. }
  27. }

四、Alarm 闹钟

 this.Alarm(10, 30, 0, () => Debug.Log("唤醒闹钟")).Launch();

        前三个参数均为int类型,分别表示小时、分钟、秒,第四个参数为回调函数,上例表示当10点30分0秒时,将会执行回调函数,打印“唤醒闹钟”日志。

五、EverySeconds 与 EveryFrames

this.EverySeconds(5f, () => Debug.Log("TODO"), false, -1).Launch();

        EverySeconds表示每隔指定时长,执行一次事件,第一个参数为float类型,表示间隔时长,第二个参数为Action事件,第三个参数表示是否忽略时间缩放,默认为false,第四个参数表示执行的次数,传入负数代表一直循环执行,默认为-1。

  1. Timer.EveryFrame(() => Debug.Log("TODO"), -1).Launch();
  2. this.EveryFrames(5, () => Debug.Log("TODO"), -1).Launch();

        EveryFrames与EverySeconds原理相同,不同的是以帧为单位,每隔指定帧执行一次事件。EveryFrame则表示每帧,可以在不是MonoBehaviour的脚本里实现Update的功能。

六、TimeUtility 功用

当代野生程序猿
微信公众号
Unity开发日志分享,欢迎关注/留言/私信。
注:本文转载自blog.csdn.net的CoderZ1010的文章"https://blog.csdn.net/qq_42139931/article/details/124767340"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top