协程应用——制作简单的计时器

本文介绍了如何利用Unity中的协程(Coroutine)特性制作一个可复用的计时器。首先,讨论了常规计时器实现的不足,然后通过协程和WaitForSeconds实现更精确的计时功能。接着,针对协程计时器的复用性问题,提出了将计时器功能封装为独立库的方法,避免了必须挂载到MonoBehaviour上的限制。最后,提供了示例代码和使用建议。
摘要由CSDN通过智能技术生成

前言

协程作为Unity中一个比较重要的特性,当前有很多种奇妙的特性。这次就简单介绍一下如何使用Coroutine写一个可以复用的计时器(Timer)。如果你对协程不是很熟悉,建议可以先阅读一下我之前写的一篇 协程(Coroutine)原理分析

Timer的常规实现

大部分情况下, 我们可以通过直接在Update(或FixedUpdate)中使用Time.deltaTime来获取上一帧经过的时间,这样通过一个变量累加该值就可以实现计时器的效果。大致代码如下:

using UnityEngine;

public class Timer : MonoBehaviour
{
    public float waitTime = 1f;

    private float elapseTime;

    void Update()
    {
        elapseTime += Time.deltaTime;
        if (elapseTime > waitTime)
        {
            print("Timer is done");
            elapseTime = 0;
        }
    }
}

这种写法基本不会有什么问题,不过我觉得还是有两个缺点的。第一个是每次你使用的使用的时候都需要在Update中加入这段话,我只在Update()中做这一项操作的话还好,如果之后功能越添越多就会显得有点乱。第二个来说就是没有那么准确,基本每次timer的值都会大于waitTimer,帧数高的话这种误差倒还说得过去,帧数低就会有比较可观的累积误差。

Timer的协程实现方法

接下来就介绍一下如何用协程实现计时器的功能。这里就需要用到Unity内置的YieldInstruction之一————WaitForSeconds,即悬停Coroutine指定的秒数然后继续执行。此外由于我们可以通过使用StartCoroutine和StopCoroutine手动地启动和停止协程,Timer的功能也会更加完善。

下面是可供参考的Timer的协程实现代码:

using UnityEngine;
//使用协程必须添加该命名空间,
//因为IEnumerator就位于该命名空间下
using System.Collections;

public class Timer : MonoBehaviour
{
    public float waitTime = 
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值