关闭

Unity3D 计时/倒计时管理类

1158人阅读 评论(0) 收藏 举报
本文永久地址:http://www.omuying.com/article/124.aspx,【文章转载请注明出处!】

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

主要代码如下:

001 using UnityEngine;
002 using System;
003 using System.Collections;
004 using System.Collections.Generic;
005  
006 public class TimerManager
007 {
008     private static Dictionary<string, TimerItem> dictList = newDictionary<string, TimerItem>();
009  
010     /// <summary>
011     /// 注册计时
012     /// </summary>
013     /// <param name="timerKey">Timer key.</param>
014     /// <param name="totalNum">Total number.</param>
015     /// <param name="delayTime">Delay time.</param>
016     /// <param name="callback">Callback.</param>
017     /// <param name="endCallback">End callback.</param>
018     public static void Register(string timerKey, int totalNum, floatdelayTime, Action<int> callback, Action endCallback)
019     {
020         TimerItem timerItem = null;
021         if(!dictList.ContainsKey(timerKey))
022         {
023             GameObject objectItem = new GameObject ();
024             objectItem.name = timerKey;
025  
026             timerItem = objectItem.AddComponent<TimerItem> ();
027             dictList.Add(timerKey, timerItem);
028         }else
029         {
030             timerItem = dictList[timerKey];
031         }
032  
033         if(timerItem != null)
034         {
035             timerItem.Run(totalNum, delayTime, callback, endCallback);
036         }
037     }
038  
039     /// <summary>
040     /// 取消注册计时
041     /// </summary>
042     /// <param name="timerKey">Timer key.</param>
043     public static void UnRegister(string timerKey)
044     {
045         if(!dictList.ContainsKey(timerKey)) return;
046  
047         TimerItem timerItem = dictList [timerKey];
048         if(timerItem != null)
049         {
050             timerItem.Stop ();
051             GameObject.Destroy(timerItem.gameObject);
052         }
053     }
054 }
055  
056 class TimerItem : MonoBehaviour
057 {
058     private int totalNum;
059     private float delayTime;
060     private Action<int> callback;
061     private Action endCallback;
062  
063     private int currentIndex;
064  
065     public void Run(int totalNum, float delayTime, Action<int> callback, Action endCallback)
066     {
067         this.Stop ();
068  
069         this.currentIndex = 0;
070  
071         this.totalNum = totalNum;
072         this.delayTime = delayTime;
073         this.callback = callback;
074         this.endCallback = endCallback;
075  
076         this.StartCoroutine ("EnumeratorAction");
077     }
078  
079     public void Stop()
080     {
081         this.StopCoroutine ("EnumeratorAction");
082     }
083  
084     private IEnumerator EnumeratorAction()
085     {
086         yield return new WaitForSeconds (this.delayTime);
087  
088         this.currentIndex ++;
089         if(this.callback != nullthis.callback(this.currentIndex);
090  
091         if(this.totalNum != -1)
092         {
093             if(this.currentIndex >= this.totalNum)
094             {
095                 if(this.endCallback != nullthis.endCallback();
096                 yield break;
097             }
098         }
099         this.StartCoroutine("EnumeratorAction");
100     }
101 }
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Unity3D开发学习之路--两种在Unity3D中创建倒计时器的方法

两种在Unity3D中创建倒计时器的方法
  • ballshe
  • ballshe
  • 2016-08-25 22:53
  • 6858

Unity3D C# 简单的倒计时

using System; using UnityEngine; using System.Collections; public class TimeCountdown : MonoBehavio...
  • AWNUXCVBN
  • AWNUXCVBN
  • 2013-09-17 11:17
  • 23711

Unity3d协程实现倒数计时

Unity3d协程的知识,不了解的同学可以在网上查找一下相关资料或者看一下Unity3D协程介绍 以及 使用。 下面介绍Unity3d协程实现倒数计时,实现代码: public class Gam...
  • Gary_888
  • Gary_888
  • 2016-05-17 14:57
  • 2744

Unity3d游戏开发框架-标志量-数学管理类-时间管理-Log日志管理

新建一个文件夹:Util 新建C#文件: 1.GmagFalag.cs 2.Log.cs 3.MathUtilLite.cs 4.TimeMgr.csusing UnityEngine; u...
  • u013108312
  • u013108312
  • 2016-08-31 18:23
  • 774

Unity3d游戏开发框架-时间管理类,设置时间执行方法。

using UnityEngine; using System.Collections; using System.Collections.Generic; using System;public c...
  • u013108312
  • u013108312
  • 2017-01-12 15:42
  • 1187

Unity时间管理类,用来做一些方法的延迟调用

using UnityEngine; using System.Collections; using System; public class Timer {//MonoBehaviour p...
  • AGroupOfRuffian
  • AGroupOfRuffian
  • 2017-08-22 09:47
  • 268

unity3d倒计时c#代码

c#倒计时/计时代码 using UnityEngine; using System.Collections; using System; public class textTest : Mo...
  • woailvmengmeng
  • woailvmengmeng
  • 2013-12-12 19:20
  • 2875

Unity 实现倒计时 协程

作为初学者 欢迎大家提建议~ 用UGUI+协程方式 实现倒计时 unity中: 脚本绑在 Canvas 上面测试 代码:
  • pangpangxiong0309
  • pangpangxiong0309
  • 2016-02-25 13:57
  • 1521

Unity3D协程介绍 以及 使用

作者ChevyRay ,2013年9月28日,snaker7译  原文地址:http://unitypatterns.com/introduction-to-coroutines/ 在U...
  • huang9012
  • huang9012
  • 2014-08-11 15:09
  • 82175

[Unity3D]Lua中使用协程coroutine和计时器timer

习惯了unity3d的协程用法,那么我们在Unity里面怎么使用:
  • chiuan
  • chiuan
  • 2014-08-22 23:57
  • 10038
    个人资料
    • 访问:33229次
    • 积分:399
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:40篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档