Unity定时器

这篇具有很好参考价值的文章主要介绍了Unity定时器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.Unity定时器受TimeScale影响

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



public enum ETimerType
{
    OneShot,
    Repeated,
}


public class Timer
{

    //当前这个定时器对象的唯一标识符
    public string key;


    //超时时间
    public float time;


    //当前数到的时间
    public float curTime;


    //定时器的类型 
    public ETimerType type;


    //回调函数
    public Action action;
    //
    public bool isDead;


    public Timer(string key, float time, ETimerType type, Action action)
    {
        curTime = 0;
        this.key = key;
        this.time = time;
        this.type = type;
        this.action = action;
        isDead = false;
    }
}



public class TimerMgr
{

    static TimerMgr sInstance = null;
    public static TimerMgr Instance
    {
        get
        {
            if (sInstance == null)
            {
                sInstance = new TimerMgr();
            }
            return sInstance;
        }
    }

    //管理所有的定时器
    Dictionary<string, Timer> mAllTimerManagerMap;


    TimerMgr()
    {
        mAllTimerManagerMap = new Dictionary<string, Timer>();
    }


    //增
    public bool AddTimer(Timer timer)
    {
        if (mAllTimerManagerMap.ContainsKey(timer.key))
        {
            return false;
        }

        mAllTimerManagerMap.Add(timer.key, timer);

        return true;
    }


    //删
    public bool DeleteTimer(string key)
    {
        Timer timer = null;
        if (mAllTimerManagerMap.TryGetValue(key, out timer) == false)
        {
            return false;
        }
        timer.isDead = true;
        return true;
    }

    public bool DeleteAllTimer()
    {
        if (mAllTimerManagerMap.Count == 0) { return false; }
        string[] key = new string[mAllTimerManagerMap.Count];
        //将字典中的 Key 值从零开始拷贝至 mIds中
        mAllTimerManagerMap.Keys.CopyTo(key, 0);
        int count = mAllTimerManagerMap.Count;
        for (int i = 0; i < count; i++)
        {
            mAllTimerManagerMap[key[i]].isDead = true;
        }
        return true;
    }

    //OneShot
    public bool OneShot(string key, float time, Action action)
    {
        return AddTimer(new Timer(key, time, ETimerType.OneShot, action));
    }


    //Repeated
    public bool Repeated(string key, float time, Action action)
    {
        return AddTimer(new Timer(key, time, ETimerType.Repeated, action));
    }

    //运行定时器
    public void Update()
    {
        float dt = Time.deltaTime;
        List<string> needDel = new List<string>();
        foreach (var kv in mAllTimerManagerMap)
        {
            if (kv.Value.isDead)
            {
                needDel.Add(kv.Key);
                continue;
            }
            kv.Value.curTime += dt;
            if (kv.Value.curTime >= kv.Value.time)
            {
                kv.Value.curTime = 0f;
                kv.Value.action();
                if (kv.Value.type == ETimerType.OneShot)
                {
                    kv.Value.isDead = true;
                }
            }
            if (kv.Value.isDead)
            {
                needDel.Add(kv.Key);
            }
        }

        for (int i = 0; i < needDel.Count; i++)
        {
            mAllTimerManagerMap.Remove(needDel[i]);
        }
    }
}

2.用法文章来源地址https://www.toymoban.com/news/detail-504520.html

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

public class Test : MonoBehaviour
{
    void Start()
    {
        TimerMgr.Instance.OneShot("OneShotTimer", 6f, ExecuteOneShot);
        TimerMgr.Instance.Repeated("RepeatedTimer", 2f, ExecuteRepeated);
    }

    void Update()
    {
        TimerMgr.Instance.Update();
    }

    void ExecuteOneShot()
    {
        Debug.Log("OneShot");
    }
    void ExecuteRepeated()
    {
        Debug.Log("Repeated");
    }


}

到了这里,关于Unity定时器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Qt】定时器处理——定时器事件类QTimerEvent和定时器类QTimer使用

    Qt的定时器只能通过纯代码实现,定时器顾名思义,主要作用是定时特定的时间。 Qt提供了定时器事件类 QQTimerEvent 和定时器类 QTimer 实现定时器操作。 Qt提供了更高层次的定时器编程接口** QTimer **类,可以使用信号和槽,还可以设置定时一次。比较常用的方法有: QTimer::set

    2024年02月05日
    浏览(45)
  • JMeter定时器之同步定时器

      在实际生活中大家肯定遇到过一种场景,就是在某一时间或某一时刻,某件商品进行抢购,相当于秒杀;但是用JMeter进行测试的时候,如何模拟这种场景?用一种组件就可以实现,定时器中的“同步定时器”。 了解t同步定时器的基础功能;熟悉同步定时器的使用场景。

    2024年01月16日
    浏览(44)
  • STM32单片机(六)TIM定时器 -> 第二节:TIM定时中断练习(定时器定时中断和定时器外部时钟)

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月09日
    浏览(39)
  • STM32定时器-定时器中断功能详解

    STM32的众多定时器中我们使用最多的是高级定时器和通用定时器,而高级定时器一般也是用作通用定时器的功能,下面我们就以通用定时器为例进行讲解,其功能和特点包括: 通用与基本定时器(2~7)位于低速的APB1总线上 高级定时器(1、8)位于高速的APB2总线上 自动装载计

    2024年02月08日
    浏览(50)
  • 【STM32】STM32学习笔记-定时器定时中断 定时器外部时钟(14)

    1.1 TIM_InternalClockConfig 1.2 TIM_TimeBaseInit 1.3 TIM_TimeBaseInitTypeDef 1.4 TIM_ClearFlag 1.5 TIM_ITConfig 1.6 TIM_Cmd 1.7 中断服务函数 参考程序 1.8 TIM_ETRClockMode2Config timer.h timer.c main.c timer.h timer.c main.c 09-定时器定时中断.rar 10-定时器外部时钟.rar 参考: 【STM32】江科大STM32学习笔记汇总

    2024年02月03日
    浏览(51)
  • STM32中TIM定时器定时功能详解(适用基本,通用,高级定时器)

    定时器有高级定时器、通用定时器、基本定时器三种类型。具体功能如下。 上面是每种定时器所具有的功能。 我们可以看到每种定时器都有一个定时功能,(可能是名字的由来吧)。当然,每个定时器都可以来使用定时功能,但是我们往往在基本定时器和通用定时器上面使用

    2024年01月19日
    浏览(59)
  • 51单片机定时器/计数器(定时器中断)

    实现功能 通过定时器终端控制LED灯 D1 间隔一秒闪烁 单片机型号:STC89C52 定时器介绍 1、51单片机定时器原理 定时器实质上就是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是每来一个脉冲,计数器就自动加1,,当加到定数器满时,再输入一个脉冲就使定时器回零

    2024年02月06日
    浏览(52)
  • STM32 MCU 定时器详解(1)--基本定时器

    定时器是一种电子组件,主要用于定时控制,具备精确计时的能力。它可以在设定的时间间隔内触发特定的操作,如发送数据、采集传感器信息、检测输入信号或产生规律性输出波形。这种灵活性使定时器在多个行业中得到广泛应用,支持各种复杂功能的实现,是现代电子系

    2024年02月22日
    浏览(49)
  • STM32 MCU 定时器详解(3)--高级定时器

    16位递增、递减、中心对齐计数器(计数值:0~65535) 16位预分频器(分频系数:1~65536) 可用于触发DAC、ADC 在更新事件、触发事件、输入捕获、输出比较时,会产生中断/DMA请求 4个独立通道,可用于:输入捕获、输出比较、输出PWM、单脉冲模式 使用外部信号控制定时器且可实

    2024年04月17日
    浏览(45)
  • 定时器详解 -- 定时器中断、PWM输出 --stm32

    STM32F103系列芯片拥有多种定时器,包括基本定时器、通用定时器和高级定时器,每种定时器都具有一些特定的功能。 向上计数:计数器从0计数到自动重装载值(ARR),然后重新从0开始计数并且产生一个计数器溢出事件。 向下计数:计数器从自动重装载值(ARR)开始向下计数

    2024年02月11日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包