前言
倒计时功能在游戏中一直很重要, 不管是活动开放时间,还是技能冷却。
本文实现了一个通用倒计时组件,实现了倒计时的基本功能,支持倒计时结束后的回调。
设计思路
1、倒计时的实现是通过协程,waitforseconds(delay)可以很好的每隔一个delay执行一次方法,如果需要很精细的时间, 可以将delay设置成0.1等小于1的值。
2、回调是在倒计时为0时,执行一个action类型的方法。
3、我的这个组件默认是需要text组件来显示, 也可以根据需求删除。
先看效果:
代码实现
// 倒计时 // 倒计时结束的回调 using system; using system.collections; using unityengine; using unityengine.ui; [requirecomponent(typeof(text))] public class countdowntime : monobehaviour { public int testtime = 15; private int _timeleft = 0; private text _texttimer = null; private float _delay = 1; private action _endcallback = null; private void start() { if (_texttimer == null) _texttimer = getcomponent<text>(); setendcallback(testendcallback); begin(testtime, true); } public void setendcallback(action callback) { _endcallback = callback; } public void begin(int timeleft, bool isrightnow) { _timeleft = timeleft; if (_texttimer == null) _texttimer = getcomponent<text>(); if (isrightnow) countdown(); if (gameobject.activeinhierarchy) startcoroutine(polling(_delay, countdown)); } private ienumerator polling(float delay, action voidfunc) { while (delay > 0) { voidfunc(); if (_timeleft < 0 && _endcallback != null) { _endcallback(); _endcallback = null; yield return null; } yield return new waitforseconds(delay); } } private void countdown() { if (_timeleft >= 0) { timespan ts = new timespan(0, 0, _timeleft--); _texttimer.text = ts.tostring(); } else if (_timeleft < -1) { _texttimer.text = _timeleft.tostring(); } } private void testendcallback() { _texttimer.text = "end!!!"; } }
如有错误,欢迎指出。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
您可能感兴趣的文章:
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!
网友评论