Unity实现倒计时组件

前言

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

设计思路

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

如有错误,欢迎指出。

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

(0)

相关推荐

  • Unity实现倒计时功能

    本文实例为大家分享了Unity实现倒计时功能的具体代码,供大家参考,具体内容如下 有两种思路可以实现倒计时,一个是Update,另一个是协程.这里只展示核心的算法思路,有收获的还请点个赞哦 Update 首先定义三个变量,访问权限按需求设置: float GameTime; // 游戏总时间,int或者float都可,单位为秒 float TimeLeft; // 游戏剩余时间,单位为秒 float Timer; // 计时器 Text TimeCountDown; // 计时器Text引用 思

  • Unity实现倒计时组件

    前言 倒计时功能在游戏中一直很重要, 不管是活动开放时间,还是技能冷却. 本文实现了一个通用倒计时组件,实现了倒计时的基本功能,支持倒计时结束后的回调. 设计思路 1.倒计时的实现是通过协程,WaitForSeconds(delay)可以很好的每隔一个delay执行一次方法,如果需要很精细的时间, 可以将delay设置成0.1等小于1的值. 2.回调是在倒计时为0时,执行一个Action类型的方法. 3.我的这个组件默认是需要Text组件来显示, 也可以根据需求删除. 先看效果: 代码实现 //

  • 基于vue2.0的活动倒计时组件countdown(附源码下载)

    这是一款基于vue2.0的活动倒计时组件,可以使用服务端时间作为当前时间,在倒计时开始和结束时可以自定义回调函数.   查看演示       下载源码 安装 npm install vue2-countdown --save 使用组件 首先在模板部分添加: <template> <div> <count-down v-on:start_callback="countDownS_cb(1)" v-on:end_callback="countDown

  • vue获取验证码倒计时组件

    本文实例为大家分享了vue获取验证码倒计时组件,供大家参考,具体内容如下 之前写过一个计时函数,有计算误差,但是验证码的60秒倒计时可以忽略这一点点误差.直接上代码. <template> <div class="captcha-row"> <input class="captcha-input" placeholder="输入验证码" auto-focus /> <div v-if="show

  • 基于vue2的canvas时钟倒计时组件步骤解析

    今天给大家介绍一款基于vue2的canvas时钟倒计时组件,这个时钟倒计时组件采用canvas动画的炫酷动画效果形式,根据剩余时间的多少变换颜色和旋转扇形的速度,适合抢购.拍卖.下注等业务场景,且对移动端友好. 具体步骤分析: 假如设定倒计时总时间为15s, 变黄色时机为10s,变红色时机为5s. 1.开始倒计时后颜色为绿色.绿色含义是:倒计时的时间离结束时间还很长. 2.10s后变黄色.黄色的含义是:倒计时的时间离结束时间挺近了,起警告作用.动画中,出现快速旋转的扇形. 3.5s后变红色.红色

  • vue中倒计时组件的实例代码

    子组件: <template> <span :endTime="endTime" :callback="callback" :endText="endText"> <slot> {{content}} </slot> </span> </template> <script> export default { data(){ return { content: ''

  • Vue 封装防刷新考试倒计时组件的实现

    本文详细的介绍了防刷新考试倒计时组件 ,分享给大家,也给自己留个笔记,感兴趣的可以了解下 <!-- 考试倒计时组件 --> <template> <div class="time"> <p>00:{{timerCount2}}:{{timerCount1}}</p> <button @click="reset">重新计时</button> </div> </temp

  • vue实现秒杀倒计时组件

    本文实例为大家分享了vue实现秒杀倒计时组件的具体代码,供大家参考,具体内容如下 下面是使用Vue实现秒杀倒计时组件 开发思路 1.请求服务器获取这一刻的服务器时间(统一以服务器时间为基准) 2.获取用户当前电脑时间与服务器时间比对,获取时间差.以当前电脑时间-减去时间差为最终时间(定义为服务器当前时间) 3.设置秒杀开始时间 4.秒杀时间与服务器当前时间比对,获取时间差(共X秒) 5.根据X秒计算出离秒杀开始时间还有x天x小时x分钟x秒 代码实现 下面代码只展示第4.第5步骤 组件CountD

  • 利用Android设计一个倒计时组件

    目录 1 背景 2 对比分析 2.1 是否是倒计时 2.2 支持多任务 2.3 支持时间校准 2.4 支持同帧刷新 2.5 支持延迟执行 2.6 支持CPU休眠 3 需求目标 4 设计类结构 5 具体实现 5.1 收口 5.2 支持与RxJava协同 5.3 支持时间校准 5.4 支持同步刷新 5.5 支持延迟执行 1 背景 我们在项目中经常有倒计时的场景,比如活动倒计时.抢红包倒计时等等.通常情况下,我们实现倒计时的方案有Android中的CountDownTimer.Java中自带的Time

  • 利用momentJs做一个倒计时组件(实例代码)

    vue和moment做的一个倒计时 展示样式: <template> <div class="table-right flex-a-center"> <div class="time-text"> <span class="timeTextSpan" v-for="item,index of h" >{{item}}</span> <span class=&qu

随机推荐