unity工具类篇 unity 计时器
一、计时器的主要功能
- 在规定时间内倒计时
- 显示倒计时时间
- 显示正计时时间
- 暂停、继续
- 时间速率影响
- 获取倒计时剩余时间
- 倒计时结束的回调
二、计时器实现
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 计时器相关推荐
- Unity 工具类 之 Excel 转换为 json、csv、xml、lua格式
Unity 工具类 之 Excel 转换为 json.csv.xml.csv 格式 目录 Unity 工具类 之 Excel 转换为 json.csv.xml.csv 格式 一.介绍 二.操作原理 三 ...
- Unity 工具类 之 编辑扩展器 之 简单的音效管理编辑扩展器面板实现
Unity 工具类 之 编辑扩展器 之 简单的音效管理编辑扩展器面板实现 目录 Unity 工具类 之 编辑扩展器 之 简单的音效管理编辑扩展器面板实现 一.简单介绍 二.实现原理 三.注意事项 四. ...
- Unity 工具类 之 WWW/UnityWebRequest 下载压缩文件(zip),解压到本地且加载使用解压数据的简单案例(内也含压缩文件例子)
Unity 工具类 之 WWW/UnityWebRequest 网络下载压缩文件(zip),解压到本地,且加载使用解压数据的简单案例(内也含压缩文件例子) 目录 Unity 工具类 之 WWW/Uni ...
- Unity 工具类 之 简单快速 获取当前所在位置,所在城市,经纬度等
Unity 工具类 之 简单快速 获取当前所在位置,所在城市,经纬度等 目录 Unity 工具类 之 简单快速 获取当前所在位置,所在城市,经纬度等 一.方法提要: 二.使用注意: 三.json ...
- Unity 工具类 之 贝塞尔 Bezier 曲线
Unity 工具类 之 贝塞尔 Bezier 曲线 目录 Unity 工具类 之 贝塞尔 Bezier 曲线 一.简单介绍 二.原理与分类 三.公式与原理图演示 五.注意事项 六.样例使用步骤(三次贝 ...
- Unity 工具类 之 Blender 的下载和简单使用(为捏脸做准备)
Unity 工具类 之 Blender 的下载和使用(为捏脸做准备) 目录 Unity 工具类 之 Blender 的下载和使用 一.简单介绍 二.下载地址 三.安装 四.简单使用 1.设置成中文界面 ...
- Unity工具类扩展——UGUI代码/脚本自动化生成 (一)
[为什么要做自动化工具] 工具类的创建是为了解决实际问题或者优化既有流程,我们来先看看一些项目里面经常遇到的问题. 下面这个工具就是可以直接创建一个功能的基础脚本类,就不用每次去复制上次的代码了.然后 ...
- 线程工具类 - CountDownLatch(倒计时器)
CountDownLatch官方文档 一.原理 CountDownLatch是一个非常实用的多线程控制工具类.Count Down在英文中意为倒计时,Latch意为门闩,可以简单的将CountDown ...
- 工具类篇-03-BigDecimal金额转中文大写
package com.greatmicro.ates.settle.core.util; import java.math.BigDecimal;/*** 金额工具类* @author Wang*/ ...
最新文章
- 链表的基本操作(c++实现)
- ACM MM 2020视频目标检测挑战赛冠军DeepBlueAI团队技术分享
- Check failed: error == cudaSuccess (74 vs. 0) misaligned address的解决方法
- apache+Tomcat均衡负载配置
- select,epoll的比较
- 基于docker搭建zookeeper集群、kafka集群(多台真机之间的集群)
- 搭建、使用与维护私有PyPi仓库
- infer的用法_使用infer进行静态分析总结
- Linux 端口占用情况查看
- css 为什么给span加vertical-align: middle不起作用?
- 基于深度学习生成音乐
- 《SAP快速入门》视频课程
- 神通数据库连接Oracle的Dblink
- 戴尔服务器u盘装系统看不见磁盘,戴尔电脑u盘装系统找不到硬盘怎么解决
- php判断手机号码归属地,手机号码归属查询大全所在位置(PHP通过API获取手机号码归属地)...
- 三万元存一年,利息是多少?银行工作人员:这么存最合算!
- 学术论文中常见的英文简写
- android 静态注册获取电量,获取手机电池百分比和电池容量方法
- DVC 使用案例(二):共享数据与模型文件
- 卷积的数学理解和图像处理
热门文章
- 无需编程基础,小白就能快速学会的数据可视化工具
- php里面算数e什么意思,JavaScript代表算术常量e即自然对数的底数的属性Math.E
- Storage Access API 介绍
- 骨传导耳机好用吗?骨传导耳机原理是什么?
- 2017华为比赛遗传算法总结
- 第三届开源科学软件创意大赛——华为昇思MindSopre赛道火热报名中
- Coding and Paper Letter(八十一)
- oracle 强制建视图,11.2.6 强制创建视图
- 云服务器上面不显示控制台了,买的云服务器在控制台不见了
- 边缘直方图描述符(EHD)Edge Histogram Descriptor