Unity实现倒计时组件

时间:2021-05-20

前言

倒计时功能在游戏中一直很重要, 不管是活动开放时间,还是技能冷却。
本文实现了一个通用倒计时组件,实现了倒计时的基本功能,支持倒计时结束后的回调。

设计思路

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!!!"; }}

如有错误,欢迎指出。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章