一、计时器的主要功能

  1. 在规定时间内倒计时
  2. 显示倒计时时间
  3. 显示正计时时间
  4. 暂停、继续
  5. 时间速率影响
  6. 获取倒计时剩余时间
  7. 倒计时结束的回调

二、计时器实现

using UnityEngine;public delegate void CompleteEvent();
public delegate void UpdateEvent(float t);public class Timer : MonoBehaviour
{UpdateEvent updateEvent;CompleteEvent onCompleted;bool isLog = true;//是否打印消息float timeTarget;   // 计时时间/float timeStart;    // 开始计时时间/float offsetTime;   // 计时偏差/bool isTimer;       // 是否开始计时/bool isDestory = true;     // 计时结束后是否销毁/bool isEnd;         // 计时是否结束/bool isIgnoreTimeScale = true;  // 是否忽略时间速率bool isRepeate;     //是否重复float now;          //当前时间 正计时float downNow;          //倒计时bool isDownNow = false;     //是否是倒计时// 是否使用游戏的真实时间 不依赖游戏的时间速度float TimeNow{get { return isIgnoreTimeScale ? Time.realtimeSinceStartup : Time.time; }}/// <summary>/// 创建计时器:名字  根据名字可以创建多个计时器对象/// </summary>public static Timer createTimer(string gobjName = "Timer"){GameObject g = new GameObject(gobjName);Timer timer = g.AddComponent<Timer>();return timer;}/// <summary>/// 开始计时/// </summary>/// <param name="time_">目标时间</param>/// <param name="isDownNow">是否是倒计时</param>/// <param name="onCompleted_">完成回调函数</param>/// <param name="update">计时器进程回调函数</param>/// <param name="isIgnoreTimeScale_">是否忽略时间倍数</param>/// <param name="isRepeate_">是否重复</param>/// <param name="isDestory_">完成后是否销毁</param>public void startTiming(float timeTarget, bool isDownNow = false,CompleteEvent onCompleted_ = null, UpdateEvent update = null,bool isIgnoreTimeScale = true, bool isRepeate = false, bool isDestory = true,float offsetTime = 0, bool isEnd = false, bool isTimer = true){this.timeTarget = timeTarget;this.isIgnoreTimeScale = isIgnoreTimeScale;this.isRepeate = isRepeate;this.isDestory = isDestory;this.offsetTime = offsetTime;this.isEnd = isEnd;this.isTimer = isTimer;this.isDownNow = isDownNow;timeStart = TimeNow;if (onCompleted_ != null)onCompleted = onCompleted_;if (update != null)updateEvent = update;}void Update(){if (isTimer){now = TimeNow - offsetTime - timeStart;downNow = timeTarget - now;if (updateEvent != null){if (isDownNow){updateEvent(downNow);}else{updateEvent(now);}}if (now > timeTarget){if (onCompleted != null)onCompleted();if (!isRepeate)destory();elsereStartTimer();}}}/// <summary>/// 获取剩余时间/// </summary>/// <returns></returns>public float GetTimeNow(){return Mathf.Clamp(timeTarget - now, 0, timeTarget);}/// <summary>/// 计时结束/// </summary>public void destory(){isTimer = false;isEnd = true;if (isDestory)Destroy(gameObject);}float _pauseTime;/// <summary>/// 暂停计时/// </summary>public void pauseTimer(){if (isEnd){if (isLog) Debug.LogWarning("计时已经结束!");}else{if (isTimer){isTimer = false;_pauseTime = TimeNow;}}}/// <summary>/// 继续计时/// </summary>public void connitueTimer(){if (isEnd){if (isLog) Debug.LogWarning("计时已经结束!请从新计时!");}else{if (!isTimer){offsetTime += (TimeNow - _pauseTime);isTimer = true;}}}/// <summary>/// 重新计时/// </summary>public void reStartTimer(){timeStart = TimeNow;offsetTime = 0;}/// <summary>/// 更改目标时间/// </summary>/// <param name="time_"></param>public void changeTargetTime(float time_){timeTarget = time_;timeStart = TimeNow;}/// <summary>/// 游戏暂停调用/// </summary>/// <param name="isPause_"></param>void OnApplicationPause(bool isPause_){if (isPause_){pauseTimer();}else{connitueTimer();}}
}

三、格式化时间

     /// <summary>/// 格式化时间/// </summary>/// <param name="seconds">秒</param>/// <returns></returns>public static string FormatTime(float seconds){TimeSpan ts = new TimeSpan(0, 0, Convert.ToInt32(seconds));string str = "";if (ts.Hours > 0){str = ts.Hours.ToString("00") + ":" + ts.Minutes.ToString("00") + ":" + ts.Seconds.ToString("00");}if (ts.Hours == 0 && ts.Minutes > 0){str = ts.Minutes.ToString("00") + ":" + ts.Seconds.ToString("00");}if (ts.Hours == 0 && ts.Minutes == 0){str = "00:" + ts.Seconds.ToString("00");}return str;}

参考链接:https://itmonon.blog.csdn.net/article/details/124827131?spm=1001.2014.3001.5502

unity工具类篇 unity 计时器相关推荐

  1. Unity 工具类 之 Excel 转换为 json、csv、xml、lua格式

    Unity 工具类 之 Excel 转换为 json.csv.xml.csv 格式 目录 Unity 工具类 之 Excel 转换为 json.csv.xml.csv 格式 一.介绍 二.操作原理 三 ...

  2. Unity 工具类 之 编辑扩展器 之 简单的音效管理编辑扩展器面板实现

    Unity 工具类 之 编辑扩展器 之 简单的音效管理编辑扩展器面板实现 目录 Unity 工具类 之 编辑扩展器 之 简单的音效管理编辑扩展器面板实现 一.简单介绍 二.实现原理 三.注意事项 四. ...

  3. Unity 工具类 之 WWW/UnityWebRequest 下载压缩文件(zip),解压到本地且加载使用解压数据的简单案例(内也含压缩文件例子)

    Unity 工具类 之 WWW/UnityWebRequest 网络下载压缩文件(zip),解压到本地,且加载使用解压数据的简单案例(内也含压缩文件例子) 目录 Unity 工具类 之 WWW/Uni ...

  4. Unity 工具类 之 简单快速 获取当前所在位置,所在城市,经纬度等

    Unity  工具类 之 简单快速 获取当前所在位置,所在城市,经纬度等 目录 Unity  工具类 之 简单快速 获取当前所在位置,所在城市,经纬度等 一.方法提要: 二.使用注意: 三.json ...

  5. Unity 工具类 之 贝塞尔 Bezier 曲线

    Unity 工具类 之 贝塞尔 Bezier 曲线 目录 Unity 工具类 之 贝塞尔 Bezier 曲线 一.简单介绍 二.原理与分类 三.公式与原理图演示 五.注意事项 六.样例使用步骤(三次贝 ...

  6. Unity 工具类 之 Blender 的下载和简单使用(为捏脸做准备)

    Unity 工具类 之 Blender 的下载和使用(为捏脸做准备) 目录 Unity 工具类 之 Blender 的下载和使用 一.简单介绍 二.下载地址 三.安装 四.简单使用 1.设置成中文界面 ...

  7. Unity工具类扩展——UGUI代码/脚本自动化生成 (一)

    [为什么要做自动化工具] 工具类的创建是为了解决实际问题或者优化既有流程,我们来先看看一些项目里面经常遇到的问题. 下面这个工具就是可以直接创建一个功能的基础脚本类,就不用每次去复制上次的代码了.然后 ...

  8. 线程工具类 - CountDownLatch(倒计时器)

    CountDownLatch官方文档 一.原理 CountDownLatch是一个非常实用的多线程控制工具类.Count Down在英文中意为倒计时,Latch意为门闩,可以简单的将CountDown ...

  9. 工具类篇-03-BigDecimal金额转中文大写

    package com.greatmicro.ates.settle.core.util; import java.math.BigDecimal;/*** 金额工具类* @author Wang*/ ...

最新文章

  1. 链表的基本操作(c++实现)
  2. ACM MM 2020视频目标检测挑战赛冠军DeepBlueAI团队技术分享
  3. Check failed: error == cudaSuccess (74 vs. 0) misaligned address的解决方法
  4. apache+Tomcat均衡负载配置
  5. select,epoll的比较
  6. 基于docker搭建zookeeper集群、kafka集群(多台真机之间的集群)
  7. 搭建、使用与维护私有PyPi仓库
  8. infer的用法_使用infer进行静态分析总结
  9. Linux 端口占用情况查看
  10. css 为什么给span加vertical-align: middle不起作用?
  11. 基于深度学习生成音乐
  12. 《SAP快速入门》视频课程
  13. 神通数据库连接Oracle的Dblink
  14. 戴尔服务器u盘装系统看不见磁盘,戴尔电脑u盘装系统找不到硬盘怎么解决
  15. php判断手机号码归属地,手机号码归属查询大全所在位置(PHP通过API获取手机号码归属地)...
  16. 三万元存一年,利息是多少?银行工作人员:这么存最合算!
  17. 学术论文中常见的英文简写
  18. android 静态注册获取电量,获取手机电池百分比和电池容量方法
  19. DVC 使用案例(二):共享数据与模型文件
  20. 卷积的数学理解和图像处理

热门文章

  1. 无需编程基础,小白就能快速学会的数据可视化工具
  2. php里面算数e什么意思,JavaScript代表算术常量e即自然对数的底数的属性Math.E
  3. Storage Access API 介绍
  4. 骨传导耳机好用吗?骨传导耳机原理是什么?
  5. 2017华为比赛遗传算法总结
  6. 第三届开源科学软件创意大赛——华为昇思MindSopre赛道火热报名中
  7. Coding and Paper Letter(八十一)
  8. oracle 强制建视图,11.2.6 强制创建视图
  9. 云服务器上面不显示控制台了,买的云服务器在控制台不见了
  10. 边缘直方图描述符(EHD)Edge Histogram Descriptor