Unity3d 计时器、延时的三种方法

计时器的三种方法

协程

协程是一个很好用的东西,它不是多线程,是一段主程序外的代码,它不受生命周期影响,每次都是在LateUpdate之后执行,也是通过条件来判断,满足条件的时候程序执行,可以做异步场景加载,不满足的时候挂起。

有两个语法:
IEnumerator协程的返回值
yield return协程的判断条件

我们先建一个time脚本,挂在Canvas上面
完整代码

// An highlighted block
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class time : MonoBehaviour
{
  private int hour;//小时
  private int minute;//分钟
  private int second;//秒
  public Text timeshow;
  // Start is called before the first frame update
  void Start()
  {
      hour = 0;
      minute = 0;
      second = 0;
      StartCoroutine(showtime());//开启协程
  }
  private IEnumerator showtime()
  {
      while (hour<=24)
      {
          yield return new WaitForSeconds(1);//每一秒执行一次
          second++;
          if (second > 60)
          {
              second = 0;
              minute++;
          }
          else if (minute > 60)
          {
              hour++;
              minute = 0;
          }
          else if (hour > 24)
          {
              hour = 0;
          }
          timeshow.text = hour + "时" + minute + "分" + second + "秒";
      }
      
  }
  // Update is called once per frame
  void Update()
  {
      
  }
}

看下效果
在这里插入图片描述

Time类

Time类主要用到的是Time.deltatime增量时间,它是每秒去执行,而不是每帧去执行。
1秒60帧就是增量时间的1/60秒,这个你们可以去看官网的说明

首先建一个time脚本,挂在Canvas上面

// An highlighted block
using UnityEngine;
using UnityEngine.UI;

public class time : MonoBehaviour
{
    private int hour;//小时
    private int minute;//分钟
    private int second;//秒
    public Text timeshow;
    private float times;//定义一个数值
    // Start is called before the first frame update
    void Start()
    {
        times = 0;
    }
    // Update is called once per frame
    void Update()
    {
        times += Time.deltaTime;
        if (times > 1f)
        {
            second++;
            times = 0;
        }
        else if (second > 60)
        {
            minute++;
            second = 0;
        }
        else if (minute > 60)
        {
            hour++;
            minute = 0;
        }
        timeshow.text = hour + "时" + minute + "分" + second + "秒";
    }
}

看下效果
在这里插入图片描述

InvokeRepeating

InvokeRepeating是一个函数,它的形式是这样的
InvokeRepeating(string,float,float_1);string代表回调函数,float代表多少秒后执行,float_1代表多少秒后重复调用前面的函数。

创建time脚本

// An highlighted block
using UnityEngine;
using UnityEngine.UI;

public class time : MonoBehaviour
{
    private int hour;//小时
    private int minute;//分钟
    private int second;//秒
    public Text timeshow;
    void Start()
    {
         InvokeRepeating("Time",1f,1f);
    }
    private void Time()
    {
        second++;
        if (second > 60)
        {
            minute++;
            second = 0;
        }
        else if (minute > 60)
        {
            hour++;
            minute = 0;
        }
        timeshow.text = hour + "时" + minute + "分" + second + "秒";
    }
    void Update()
    {

    }
}

看下效果
在这里插入图片描述

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值