unity计时器功能的实现
来源:互联网 发布:软件的三层架构 编辑:程序博客网 时间:2024/05/22 00:51
最近在游戏开发的过程中需要做一些技能cd, buff持续时间的控制等功能,这些功能都需要一个计时器;
为了便利开发,自己写了一个简单的计时器,这样大部分有关计时的都可以用此计时器了;
计时器主要实现功能:
在规定的时间内倒计时,其中可以暂停,可以继续,可以设置是否受时间速率的影响等;
倒计时过程中可以时刻返回倒计时的状态;
可以获取倒计时剩余时间,倒计时结束的回调。
......
以下代码在unity中测试通过:
计时器代码
using UnityEngine;using System.Collections;using System;public delegate void CompleteEvent();public delegate void UpdateEvent(float t);public class Timer : MonoBehaviour{ bool isLog = true; UpdateEvent updateEvent ; CompleteEvent onCompleted ; float timeTarget; // 计时时间/ float timeStart; // 开始计时时间/ float timeNow; // 现在时间/ float offsetTime; // 计时偏差/ bool isTimer; // 是否开始计时/ bool isDestory = true; // 计时结束后是否销毁/ bool isEnd; // 计时是否结束/ bool isIgnoreTimeScale = true; // 是否忽略时间速率 bool isRepeate; float Time_ { get { return isIgnoreTimeScale ? Time.realtimeSinceStartup : Time.time; } } float now; // Update is called once per frame void Update() { if (isTimer) { timeNow = Time_ - offsetTime; now = timeNow - timeStart; if (updateEvent != null) updateEvent(Mathf.Clamp01(now / timeTarget)); if (now > timeTarget) { if (onCompleted != null) onCompleted(); if (!isRepeate) destory(); else reStartTimer(); } } } public float GetLeftTime() { return Mathf.Clamp(timeTarget - now, 0, timeTarget); } void OnApplicationPause(bool isPause_) { if (isPause_) { pauseTimer(); } else { connitueTimer(); } } /// <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= Time_; } } } /// <summary> /// 继续计时 /// </summary> public void connitueTimer() { if (isEnd) { if (isLog) Debug.LogWarning("计时已经结束!请从新计时!"); } else { if (!isTimer) { offsetTime += (Time_ - _pauseTime); isTimer = true; } } } public void reStartTimer() { timeStart = Time_; offsetTime = 0; } public void changeTargetTime(float time_) { timeTarget += time_; } /// <summary> /// 开始计时 : /// </summary> public void startTiming(float time_, CompleteEvent onCompleted_, UpdateEvent update = null, bool isIgnoreTimeScale_ = true, bool isRepeate_ = false, bool isDestory_ = true) { timeTarget = time_;if (onCompleted_ != null) onCompleted = onCompleted_;if (update != null) updateEvent = update; isDestory = isDestory_; isIgnoreTimeScale = isIgnoreTimeScale_; isRepeate = isRepeate_; timeStart = Time_; offsetTime = 0; isEnd = false; isTimer = true; } /// <summary> /// 创建计时器:名字 /// </summary> public static Timer createTimer(string gobjName = "Timer") { GameObject g = new GameObject(gobjName); Timer timer = g.AddComponent<Timer>(); return timer; }}
以上是计时器功能的实现;怎么用这个计时器呢?
我们可以在需要计时器的脚本中这样去创建一个计时器:
实现代码:
using UnityEngine;using System.Collections;public class Test : MonoBehaviour{// Use this for initializationvoid Start (){// 创建计时器Timer timer = Timer.createTimer ("Timer");//开始计时timer.startTiming (1, OnComplete, OnProcess);}// Update is called once per framevoid Update (){}// 计时结束的回调void OnComplete (){Debug.Log ("complete !");}// 计时器的进程void OnProcess (float p){Debug.Log ("on process " + p);}}
测试脚本中只写出了如何创建和简单使用计时器,像一些控制计时器的暂停,继续,获取剩余时间等等一系列的功能可以自己测试一下。
2 0
- unity计时器功能的实现
- Unity 模拟协程实现计时器功能
- 安卓中实现计时器的功能
- 计时器---倒计时功能的实现
- Android 实现计时器功能
- Unity-只使用一个计时器来实现多波怪的生成
- 使用实现Runnable的多线程,实现秒表计时器功能
- Unity 封装 倒计时(计时器,CountDownTimer),实现周期更新、技能冷却等功能
- Unity的几中计时器
- JS实现钟表计时器功能
- js实现倒数计时器功能
- 286_实现计时器功能
- 5.计时器实现计时功能
- 使用NSTimer计时器实现简单的按钮倒计时功能
- Chronometer实现计时器的开始停止重置功能
- Unity 计时器
- 【Unity】计时器
- unity 计时器
- 安卓市场-框架搭建
- 玩具:加减法验证码(1+?=4)
- C语言基础3
- poj 2318 TOYS(判点与线段的关系)
- 利用python,shell,crontab实现成绩自动查询和更新邮件提醒
- unity计时器功能的实现
- Linux-命令-grep
- 用Python做一个模板引擎玩具
- Linux文件特殊权限
- Android进阶之Fragment详解
- 【Object-C】 NSTimer用法,暂停,继续,初始化
- GNU编码风格
- TsComponentPack - delphi开发组件包
- Max Sum