文档章节

【原创】Unity3D 时间/计时管理器(二)

MrBlack
 MrBlack
发布于 2015/07/25 10:57
字数 312
阅读 29
收藏 0

在平时的开发过程中,计时、倒计时经常在游戏中用到,想必大家都有自己的处理高招,为了以后用方便使用,抽象出一个 TimerManager 类,功能很简单,这儿采用协程的 WaitForSeconds 来处理计时、倒计时,希望对你有所帮助!

using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;

public class TimerManager
{
	private static Dictionary<string, TimerItem> dictList = new Dictionary<string, TimerItem>();

	/// <summary>
	/// 注册计时
	/// </summary>
	/// <param name="timerKey">Timer key.</param>
	/// <param name="totalNum">Total number.</param>
	/// <param name="delayTime">Delay time.</param>
	/// <param name="callback">Callback.</param>
	/// <param name="endCallback">End callback.</param>
	public static void Register(string timerKey, int totalNum, float delayTime, Action<int> callback, Action endCallback)
	{
		TimerItem timerItem = null;
		if(!dictList.ContainsKey(timerKey))
		{
			GameObject objectItem = new GameObject ();
			objectItem.name = timerKey;

			timerItem = objectItem.AddComponent<TimerItem> ();
			dictList.Add(timerKey, timerItem);
		}else
		{
			timerItem = dictList[timerKey];
		}

		if(timerItem != null)
		{
			timerItem.Run(totalNum, delayTime, callback, endCallback);
		}
	}

	/// <summary>
	/// 取消注册计时
	/// </summary>
	/// <param name="timerKey">Timer key.</param>
	public static void UnRegister(string timerKey)
	{
		if(!dictList.ContainsKey(timerKey)) return;

		TimerItem timerItem = dictList [timerKey];
		if(timerItem != null)
		{
			timerItem.Stop ();
			GameObject.Destroy(timerItem.gameObject);
		}
	}
}

class TimerItem : MonoBehaviour
{
	private int totalNum;
	private float delayTime;
	private Action<int> callback;
	private Action endCallback;

	private int currentIndex;

	public void Run(int totalNum, float delayTime, Action<int> callback, Action endCallback)
	{
		this.Stop ();

		this.currentIndex = 0;

		this.totalNum = totalNum;
		this.delayTime = delayTime;
		this.callback = callback;
		this.endCallback = endCallback;

		this.StartCoroutine ("EnumeratorAction");
	}

	public void Stop()
	{
		this.StopCoroutine ("EnumeratorAction");
	}

	private IEnumerator EnumeratorAction()
	{
		yield return new WaitForSeconds (this.delayTime);

		this.currentIndex ++;
		if(this.callback != null) this.callback(this.currentIndex);

		if(this.totalNum != -1)
		{
			if(this.currentIndex >= this.totalNum)
			{
				if(this.endCallback != null) this.endCallback();
				yield break;
			}
		}
		this.StartCoroutine("EnumeratorAction");
	}
}

链接: http://pan.baidu.com/s/1ntra2nv 密码: txfb

© 著作权归作者所有

MrBlack
粉丝 0
博文 14
码字总数 11101
作品 0
闸北
高级程序员
私信 提问
C#开源定时回调库PETimer的使用

PETimer PETimer开源项目GitHub地址:点击跳转 PETimer 1.双端通用:基于C#语言实现的高效便捷计时器,可运行在服务器(.net core/.net framework)以及Unity客户端环境中。 2.功能丰富:PET...

PlaneZhong
01/16
0
0
Unity MMORPG游戏开发教程(一)——初识Unity

五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑。本系列文章以C#为介绍语言,基于Unity2017.4.x。 一、环境搭建 我使用的是Unity+VSCode,用的是mac系统,windows的自己搜资料,步骤差不多...

五邑隐侠
03/06
0
0
给Ubuntu11.04测试者几点提示

如果你正玩Ubuntu11.04测试版,嗯,事情可能有些偏离你的预想。下面是一些有用的提示,都是从AskUbuntu总结的,希望对您有点帮助。 No.1如何恢复“Unity”? 若你实验Unity导致有点麻烦,很容...

火耳
2011/01/10
1K
2
Unity2018新功能抢鲜 | Package Manager

本文首发于“洪流学堂”微信公众号。 洪流学堂,让你学Unity快人几步 一个包是一个容器,它可以包含各种资源的组合:shader、纹理、插件、图标、脚本等,可以增强项目的各个部分。相对于Ass...

zhenghongzhi6
2018/04/21
0
0
Visual Studio Tools for Unity 2.3 发布

Visual Studio Tools for Unity 2.3 发布,Visual Studio Tools for Unity (VSTU)是 Visual Studio的 Unity 插件,可以使用 Visual Studio 构建 Unity 游戏。 VSTU 2.3 值得关注的更新: ......

oschina
2016/07/15
2.5K
7

没有更多内容

加载失败,请刷新页面

加载更多

nginx访问日志/日志切割/静态文件过期时间/防盗链

Nginx访问日志主要记录部署在nginx上的网站访问数据,日志格式定义在nginx主配置文件中。 nginx主配置文件:/etc/nginx/nginx.conf 查看nginx主配置文件: ```markup [root@linux ~]# cat /e...

asnfuy
4分钟前
0
0
JS_高程4.变量,作用域和内存问题(2)执行环境及作用域

本文转载于:专业的前端网站➨JS_高程4.变量,作用域和内存问题(2)执行环境及作用域 1.执行环境:执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为,       每个执...

前端老手
8分钟前
2
0
手机迅雷下载的文件,电脑上找不到问题

不知道手机迅雷怎么做到的,手机迅雷下载的文件,手机上可以看的到 但连电脑后, 电脑上看不到文件 . 尝试了打开查看隐藏文件, 但没有效果 . 手机上查询文件权限 也是对的 . 可读,可写, 不隐藏 ...

ol_O_O_lo
9分钟前
2
0
python学习11:Python tuple元组详解

元组是 Python 中另一个重要的序列结构,和列表类似,也是由一系列按特定顺序排序的元素组成。和列表不同的是,列表可以任意操作元素,是可变序列;而元组是不可变序列,即元组中的元素不可以...

太空堡垒185
22分钟前
3
0
Java实现数据结构之线性结构

一、顺序表 顺序表本质是使用数组储存数组的一种数据结构,在计算机的储存中是连续的分配内存的。 下面是我自己使用java实现的简单顺序表结构 package list; public class MyArrayList<E> { ...

daxiongdi
24分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部