文档章节

简易定时器

沐风歌
 沐风歌
发布于 2017/02/17 11:32
字数 280
阅读 11
收藏 0

简述

在Unity开发中,常常会用到计时器功能。偶有所感,决定记录下来。

详细代码

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 定时器脚本
/// </summary>
public class LTimer : MonoBehaviour
{
    private float duration;
    private Action onEnd;
    private Action onUpdate;
    private bool isPause;

    /// <summary>
    /// 创建一个拥有onEnd事件的定时器
    /// </summary>
    /// <param name="_go">依附的GameObject</param>
    /// <param name="duration">定时器的时间</param>
    /// <param name="_onend">onEnd事件</param>
    /// <returns></returns>
    public static LTimer Begin(GameObject _go, float duration, Action _onend)
    {
        LTimer lt = _go.AddComponent<LTimer>();

        lt.Sample(duration, null, _onend);

        return lt;
    }

    /// <summary>
    /// 创建一个拥有onUpdate、onEnd事件的定时器
    /// </summary>
    /// <param name="_go">依附的GameObject</param>
    /// <param name="duration">定时器的时间</param>
    /// <param name="_onupdate">onUpdate事件</param>
    /// <param name="_onend">onEnd事件</param>
    /// <returns></returns>
    public static LTimer Begin(GameObject _go, float duration, Action _onupdate, Action _onend)
    {
        LTimer lt = _go.AddComponent<LTimer>();

        lt.Sample(duration, _onupdate, _onend);

        return lt;
    }

    /// <summary>
    /// 暂停该定时器
    /// </summary>
    public void Pause()
    {
        isPause = true;
    }

    /// <summary>
    /// 定时器恢复计时
    /// </summary>
    public void Resume()
    {
        isPause = false;
    }

    /// <summary>
    /// 取消定时器
    /// </summary>
    public void Cancel()
    {
        isPause = true;
        Destroy(this);
    }

    void Sample(float _duration, Action _onupdate, Action _onend)
    {
        duration = _duration;
        onUpdate = _onupdate;
        onEnd = _onend;

        isPause = false;
    }

    void Update()
    {
        if (isPause)
            return;

        duration -= Time.deltaTime;

        if (onUpdate != null)
            onUpdate();

        if (duration < 0)
        {
            if (onEnd != null)
                onEnd();

            isPause = true;
            Destroy(this);
        }
    }
}

© 著作权归作者所有

沐风歌

沐风歌

粉丝 0
博文 5
码字总数 1914
作品 0
成都
私信 提问
前端性能优化之防抖-debounce

这周接到一个需求-给输入框做模糊匹配。这还不简单,监听input事件,取到输入值去调接口不就行了? 然而后端小哥说不行,这个接口的数据量非常大,这种方式调用接口的频率太高,而且用户输入...

xshinei
2018/11/10
0
0
SPRING 定时器应用,使用定时器发送邮件

Spring 的强大又体现出来了,相较于 JDK 定时器来说 SPRING 定时器可以做的更多更好,使用起来也相对复杂,今天就为大家带来一个简易版的定时器,并且使用他实现定时邮件发送功能。 具体详细...

香吉士
2014/06/12
885
10
Swift-collectionView实现轮播图(循环滚动)

轮播图现在基本已经是app的标准配件之一了。一个实用的轮播图控件无疑能在很大程度上提高我们的开发效率。撸主自己封装了一个简易的bannerView。 使用sd加载图片,支持 horizontal 和 vertic...

zh_iOS
2016/12/26
663
2
Tornado1.0源码分析-Networking

— Main event loop — Convenient wrappers for non-blocking sockets 是一个非阻塞的IO事件循环。典型的应用使用一个对象,通常通过获得。使用以下三个函数往中注册事件,回调或者定时器,...

MetalBug
2015/02/28
554
0
zhong17hao/BMsgQueue

BMsgQueue = lockMq + boost::bind ##第一阶段: 实现高并发处理大量的SQL操作。(连接不同的数据服务器。处理一些DB事物) 学习使用BOOST的一些库。 试图在公司的某个应用中使用。(。。。。)...

zhong17hao
2015/02/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

手写RPC框架指北另送贴心注释代码一套

Angular8正式发布了,Java13再过几个月也要发布了,技术迭代这么快,框架的复杂度越来越大,但是原理是基本不变的。所以沉下心看清代码本质很重要,这次给大家带来的是手写RPC框架。 完整代码...

全菜工程师小辉
14分钟前
3
0
【Java】开发收货

简介 谨以此篇,记载开发过程中的一些tips。 编译器 【Shift + F6】可实现变量的联动修改。

Areya
31分钟前
5
0
DOM官方定义

DOM Document Object Model 文档对象模型 DOM的官方定义:W3C的DOM,可以使程序或者脚本(JS或AS\JScript),动态的访问或者操作文档的内容、结构、样式。 DOM只是一个标准,操作网页的标准。...

前端老手
36分钟前
6
0
IT兄弟连 HTML5教程 HTML5的学习线路图 第一阶段学习网页制作

学习HTML5技术可并不是简单学会几个新增的标签而已,HTML5现在可以说是前端所有技术的代名词。需要学习的语言和工具不仅多,对于刚接触他们的新人会感觉很乱。另外,前端开发也会细分很多个开...

老码农的一亩三分地
38分钟前
6
0
可见性有序性,Happens-before来搞定

写在前面 上一篇文章并发 Bug 之源有三,请睁大眼睛看清它们 谈到了可见性/原子性/有序性三个问题,这些问题通常违背我们的直觉和思考模式,也就导致了很多并发 Bug 为了解决 CPU,内存,IO ...

tan日拱一兵
53分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部