Unity3d当达到关卡胜利条件后,计时器不微信小程序停止计时器该怎么办?

原地址:http://blog.sina.com.cn/s/blog_5b6cb9500101aejs.html
https://github.com/xuzhiping7/Unity3d-Timer
项目中管理计时器太混乱难看了,用好听点的话来说就是代码不优雅。
想了下就随手简单写了个时间管理模块了。其实有好几种实现方式的,但是选用了U3D最为合适和简单的方式写。效率可能不高,但做小游戏是压根没问题的了。
原理简单点来说就是统一管理计时器。
每个计时器有自己的开始、暂停、结束、重新开始。当计时结束之后则调用相应的一个或者多个函数。
Timer.cs算是基类,TimerManager.cs则是管理每一个计时器的管理程序。根据不同的项目改至适用即可。
就那样,代码非常简单。就是一个委托回调。
具体代码放到GITHUB了,有兴趣的同学可以上去看看。
https://github.com/xuzhiping7/Unity3d-Timer
//Coded by ZhipingXu
//Too simple, so I do not need to explain, just see the code. Help yourself.
public class Timer{
//If the Timer is running
private bool b_T
//Current time
private float f_CurT
//Time to reach
private float f_TriggerT
//Use delegate to hold the methods
public delegate void EventHandler();
//The trigger event list
public event EventH
/// &summary&
/// &/summary&
/// &param name="second"&Trigger Time&/param&
public Timer(float second)
f_CurTime = 0.0f;
f_TriggerTime =
/// &summary&
/// Start Timer
/// &/summary&
public void Start()
b_Tricking = true;
/// &summary&
/// Update Time
/// &/summary&
public void Update(float deltaTime)
if (b_Tricking)
f_CurTime += deltaT
if (f_CurTime & f_TriggerTime)
//b_Tricking must set false before tick() , cause if u want to restart in the tick() , b_Tricking would be reset to fasle .
b_Tricking = false;
/// &summary&
/// Stop the Timer
/// &/summary&
public void Stop()
b_Tricking = false;
/// &summary&
/// Continue the Timer
/// &/summary&
public void Continue()
b_Tricking = true;
/// &summary&
/// Restart the this Timer
/// &/summary&
public void Restart()
b_Tricking = true;
f_CurTime = 0.0f;
/// &summary&
/// Change the trigger time in runtime
/// &/summary&
/// &param name="second"&Trigger Time&/param&
public void ResetTriggerTime(float second)
f_TriggerTime =
using UnityE
using System.C
public class TimerManager : MonoBehaviour
// Use this for initialization
void Start () {
test = new Timer(3.0f);
test.tick += T
test.tick += Test2;
test.Start();
// Update is called once per frame
void Update () {
//If u have many timer
//u also can serval frame call one time to save some performance, but the deltaTime u should calculate youself
//like :(u should define lastTime youself-- float)
if(Time.frameCount%5 == 0)
delta = Time.time - lastT
test.Update(Time.deltaTime);
lastTime = Time.
test.Update(Time.deltaTime);
//Some time u may need this to avoid conflict when re-init something , just a tip .
void OnDestory(){
test.tick -= T
test.tick -= Test2;
void Test()
Debug.Log("1");
void Test2()
Debug.Log("2");
阅读(...) 评论()计时器类脚本求助,很急,大神给跪了【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:83,399贴子:
计时器类脚本求助,很急,大神给跪了收藏
满足条件1触发计时器,计时期间条件1一直成立并计时3s,3S后发送消息给脚本2。满足条件2后,计时器要清零,重新计时,同时计时期间条件2一直成立,3S后发送另一条消息给脚本2。
「猎聘网」互联网名企招聘,年薪30万起工作,「0加班」 互联网行业垂直招聘网
协程。一时半会说不清,自己查资料
用Invoke函数,不要用计时器
计时器类也不是不可以,毕竟一旦实现就能创建多个不同实例用于不同方式滴计时,但对单一功能来说invoke更简单
这个好像if语句嵌套也能实现吧?
登录百度帐号他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
关注:2127
当前位置: &
__________________________________________________________________________________
开发者干货区版块规则:
  1、文章必须是图文形式。(至少2幅图)
& && &2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
& && &3、本版块只支持在游戏蛮牛原创首发,不支持转载。
& && &4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
& && &5、......
__________________________________________________________________________________
查看: 3528|回复: 31
[一码当先] Unity3D 超简单计时器Timer (二)
9排名<font color="#FF昨日变化4主题帖子积分
蛮牛币3591
在线时间856 小时
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
本帖最后由 海莉zhe 于
09:34 编辑
& &今天小编为大家分享一下,如何快速写一个简单的计时器,其实说到计时器,我们能用协程实现,也可以用unity内置的委托Invoke实现,然而小编利用自定义的委托,快速写一个统一管理计时器。
&&1.第一步,新建unity项目,并且新建一个Timer.cs ,这个是计时器的核心类文件;
& & Timer.cs 代码如下:
& && &&&[C#] 纯文本查看 复制代码public class Timer
bool _isT//是否在计时中
float _currentT//当前时间
float _endT//结束时间
public delegate void EventHander();
public event EventHander tickE
public Timer(float second)
_currentTime = 0;
_endTime =
/// &summary&
/// 开始计时
/// &/summary&
public void StartTimer()
_isTicking =
/// &summary&
/// 更新中
/// &/summary&
public void UpdateTimer(float deltaTime)
if (_isTicking)
_currentTime += deltaT
if (_currentTime & _endTime)
_isTicking =
tickEvent();
/// &summary&
/// 停止计时
/// &/summary&
public void StopTimer()
_isTicking =
/// &summary&
/// 持续计时
/// &/summary&
public void ContinueTimer()
_isTicking =
/// &summary&
/// 重新计时
/// &/summary&
public void ReStartTimer()
_isTicking =
_currentTime = 0;
/// &summary&
/// 重新设定计时器
/// &/summary&
public void ResetEndTimer(float second)
_endTime =
&&2.第二步,在场景中,直接附加调用计时器类TimerManager.cs组件类;
& &&&TimerManager.cs 代码如下:
& &&&[C#] 纯文本查看 复制代码using UnityE
using System.C
public class TimerManager : MonoBehaviour {
// Use this for initialization
void Start () {
//初始化计时器
_timer = new Timer(10);
_timer.tickEvent += SendM
//10秒后开始发送信息
_timer.StartTimer();
private void SendMessage()
Debug.Log(&Hello! AnimeKing!&);
// Update is called once per frame
void Update () {
_timer.UpdateTimer(Time.deltaTime);
void OnDestroy()
_timer.tickEvent -= SendM
2.png (121.21 KB, 下载次数: 1)
01:22 上传
& &3.第三步,直接运行项目看结果啦!
3.png (147.62 KB, 下载次数: 1)
01:22 上传
每日推荐:
72226/5000排名<font color="#FF昨日变化8主题帖子积分
日久生情, 积分 2226, 距离下一级还需 2774 积分
日久生情, 积分 2226, 距离下一级还需 2774 积分
蛮牛币2898
在线时间344 小时
赞,学习了,谢谢分享
[]: 东坡肘子2010 乐于助人,奖励 3
每日推荐:
61112/1500排名<font color="#FF昨日变化5主题帖子积分
蛮牛粉丝, 积分 1112, 距离下一级还需 388 积分
蛮牛粉丝, 积分 1112, 距离下一级还需 388 积分
蛮牛币3024
在线时间489 小时
感谢楼主 学习了
每日推荐:
3292/300排名<font color="#FF昨日变化5主题帖子积分
偶尔光临, 积分 292, 距离下一级还需 8 积分
偶尔光临, 积分 292, 距离下一级还需 8 积分
在线时间102 小时
赞,学习了,谢谢分享
每日推荐:
140/50排名<font color="#FF昨日变化69主题帖子积分
注册看看, 积分 40, 距离下一级还需 10 积分
注册看看, 积分 40, 距离下一级还需 10 积分
在线时间5 小时
赞,学习了,谢谢分享
每日推荐:
4405/500排名<font color="#FF昨日变化6主题帖子积分
四处流浪, 积分 405, 距离下一级还需 95 积分
四处流浪, 积分 405, 距离下一级还需 95 积分
在线时间116 小时
每日推荐:
9排名<font color="#FF昨日变化1主题帖子积分
蛮牛币11713
在线时间887 小时
楼主的计时器写的不错
不过看代码是基于Update 去刷新的
即基于游戏每帧刷新的
这如果运行在卡一点的电脑,存在掉帧的情况下,计时器就会出现严重bug
所以用真实时间去计算的话就能完美运行在任何机器上
以上纯属个人意见。
每日推荐:
71885/5000排名<font color="#FF昨日变化2主题帖子积分
日久生情, 积分 1885, 距离下一级还需 3115 积分
日久生情, 积分 1885, 距离下一级还需 3115 积分
蛮牛币2812
在线时间552 小时
楼主游戏切换成后台的时候,时间还会跳吗
每日推荐:
5647/1000排名<font color="#FF昨日变化26主题帖子积分
熟悉之中, 积分 647, 距离下一级还需 353 积分
熟悉之中, 积分 647, 距离下一级还需 353 积分
在线时间212 小时
感谢感谢,对C#的面向对象认识更深入了一点,非常感谢
每日推荐:
149/50排名<font color="#FF昨日变化14主题帖子积分
注册看看, 积分 49, 距离下一级还需 1 积分
注册看看, 积分 49, 距离下一级还需 1 积分
在线时间11 小时
每日推荐:
5627/1000排名<font color="#FF昨日变化3主题帖子积分
熟悉之中, 积分 627, 距离下一级还需 373 积分
熟悉之中, 积分 627, 距离下一级还需 373 积分
蛮牛币1019
在线时间181 小时
赞,学习了,谢谢分享
[]: LYF111 发帖时在路边捡到 2
蛮牛币,偷偷放进了口袋.
每日推荐:
5945/1000排名<font color="#FF昨日变化2主题帖子积分
熟悉之中, 积分 945, 距离下一级还需 55 积分
熟悉之中, 积分 945, 距离下一级还需 55 积分
蛮牛币1589
在线时间217 小时
每日推荐:
3161/300排名<font color="#FF昨日变化3主题帖子积分
偶尔光临, 积分 161, 距离下一级还需 139 积分
偶尔光临, 积分 161, 距离下一级还需 139 积分
在线时间40 小时
学习了 谢谢楼主分享啊
每日推荐:
61216/1500排名<font color="#FF昨日变化6主题帖子积分
蛮牛粉丝, 积分 1216, 距离下一级还需 284 积分
蛮牛粉丝, 积分 1216, 距离下一级还需 284 积分
蛮牛币1824
在线时间445 小时
update中用delatime,会不准确吧,毕竟帧数保证
每日推荐:
9排名<font color="#FF昨日变化1主题帖子积分
蛮牛币4496
在线时间1014 小时
不错,不错,自几动手 ,自立根生,就是TimerManager 这个命名有点大
每日推荐:
游戏蛮牛给予质量较高、影响力较大的unity相关技术开发者的荣誉称号
认证开发者
经过游戏蛮牛认证的独立开发者豆丁微信公众号
君,已阅读到文档的结尾了呢~~
unity3d多计时器的实现
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
unity3d多计时器的实现
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 js计时器的启动与停止 的文章

 

随机推荐