unity简单示例——延迟操作-定时器

【Unity】替代Invoke的定时器,可延迟执行带参方法 封装了 Update 监控实现定时器的方法,实际使用时和 Invoke 一样便利,同时解决了 Invoke 不容易查找引用和无法延时带参方法的问题。 阅读详情

不依赖于脚本实现的定时器

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
/****************************************************
作者:cg
功能:延迟一定时间后执行
*****************************************************/
public class WaitTimeManager
{
    private static TaskBehaviour m_task;
    static WaitTimeManager()
    {
        GameObject go = new GameObject("#WaitTimeManager#");
        GameObject.DontDestroyOnLoad(go);
        m_task = go.AddComponent<TaskBehaviour>();
    }

    public static Coroutine WaitTime(float time,UnityAction action)
    {
        return m_task.StartCoroutine(CustomCoroutine(time, action));
    }
    public static void Cancel(ref Coroutine coroutine)
    {
        if(coroutine!=null)
        {
            m_task.StopCoroutine(coroutine);
            coroutine = null;
        }
    }

    static IEnumerator CustomCoroutine(float time,UnityAction callback)
    {
        yield return new WaitForSeconds(time);
        if(callback!=null)
        {
            callback();
        }
    }
    class TaskBehaviour : MonoBehaviour { }
}

可循环隔一定时间间隔调用定时器

class TaskIntervalBehaviour : MonoBehaviour
    {
        IEnumerator Start()
        {//可以循环调用,利用Start自己开始
            //十秒后结束
            yield return new CustomWait(10f, 1f, delegate () {
                Debug.LogFormat("每过一秒回调一次 :{0}", Time.time);

            });
            Debug.Log("十秒结束");
        }



        public class CustomWait : CustomYieldInstruction
        {
            public override bool keepWaiting
            {
                get
                {
                    //此方法返回false表示协程结束
                    if (Time.time - m_StartTime >= m_Time)
                    {
                        return false;
                    }
                    else if (Time.time - m_LastTime >= m_Interval)
                    {
                        //更新上一次间隔时间
                        m_LastTime = Time.time;
                        m_IntervalCallback();
                    }
                    return true;
                }
            }

            private UnityAction m_IntervalCallback;
            private float m_StartTime;
            private float m_LastTime;
            private float m_Interval;
            private float m_Time;

            public CustomWait(float time, float interval, UnityAction callback)
            {
                //记录开始时间
                m_StartTime = Time.time;
                //记录上一次间隔时间
                m_LastTime = Time.time;
                //记录间隔调用时间
                m_Interval = interval;
                //记录总时间
                m_Time = time;
                //间隔回调
                m_IntervalCallback = callback;
            }
        }
    }

 

Unity 延迟总结 一、协程     void Start()     {         StartCoroutine(delay());     }     IEnumerator delay()     {         yield return new WaitForSeconds(0.5f);         //0.5秒后执行     }   二、Invoke 和 InvokeRepeating ... 阅读详情

相关推荐

Unity中简单定时器TimeManager

看到项目中有TimeManager一个类,用来创建一个time,优点是可以随时创建一个Update,包括多久后执行,执行多少次等等,摆脱Mono中的Update的不便之处。 下面贴上代码: public enum Z_TimerType {     FRAME,     TIMER, } ...

duanzhiyong666的博客 2445

Unity自制延时调用定时器

封装一个延时调用定时器类 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; public class WaitTimeManager { private static TaskBehaviour m_Task; static Wa...

linxinfa的专栏 1253

Unity 多时间源Timer定时器实战分享:健壮性、高效性、多线程安全与稳定性能全面解析

本文介绍了一款功能强大的 Timer 定时器工具类,支持多种时间源(游戏时间、非缩放时间、真实时间),具备延迟执行、循环执行、任务销毁和查找管理等丰富功能。同时,详细列出了该定时器的单元测试内容,覆盖常规和极端场景,确保其稳定高效运行。本文为开发者提供了完整的使用指南和测试保障,方便快速集成和可靠使用定时器功能。

曾用名:极客柒 1680

Unity中在Editor下的延迟调用

Unity中在Editor下的延迟调用 说到延迟调用, 大家肯定首先想到的是MonoBehavior的协程, 但是在Editor不太好用. 我们这里给出两个方案供大家选择. async 第一种比较简单, 利用C#的特性, 需要c# 5.0以上的版本支持. var delayCall = async () => { await Task.Delay(System.TimeSpan.FromSeconds(2)); Debug.Log("do something.............

木头圈 3215

Unity 史上用最舒服的Timer定时器插件 + 编辑器扩展 实时显示定时器调度的方法, 可跳转脚本执行方案

Unity 史上用最舒服的Timer定时器插件 + 编辑器扩展 实时显示定时器调度的方法, 可跳转脚本执行方案 Unity 有多个线上项目打磨下来的定时器,集好用,安全,高效为一体

曾用名:极客柒 1273

Unity Timer 轻量高效高精度定时器 实测比Dotween带的定时器开销少10倍

Timer的精度存在 1到2帧 的误差 于此 我修复了它 让它和 Unity内置的Invoke进行对比 确保了一致性。ClearTime 在清理当前类 lambda表达式时 有些bug 一些闭包方法Target存在差异 所以我修复了它。//此方法可以清理 类的所有成员方法定时器调度。现在 它是完全的保持和 Invoke在一帧内的同步。增加 可以通过调用对象来移除所有bind的方法。最近更新日志 2023/04/09。最近更新日志 2023/03/09。通过定时器的调用方法清理。

曾用名:极客柒 7032

unity前端架构之定时器完整代码实现

定时器是unity前端架构中必须有的一个模块功能。定时器一定要满足几个需求第一、需要能够添加和删除定时器第二、实现延时触发一次第三、实现循环调用第四、实现隔一定帧数调用一次帧定时器在希望某个操作在下一帧或一定帧数后执行,定时器接口中包含两个参数,定时器ID和object类型参数隔多少帧调用完整的帧定时器代码如下:try= null)如果是延时调用的一次定时器_intervalSeconds是延时时间。

lejian的专栏 1697

Unity游戏开发客户端Unity基础

Unity游戏开发客户端面经 之 Unity 篇

Sea3752的博客 2万+

【Unity】多任务定时器模块

文章目录为什么自己做定时器系统定时器原理核心代码测试 为什么自己做定时器系统 首先我们先来看下,在Unity中可以定时执行的三种方式: Update   面对多任务定时器,Update的方式较为麻烦。 协程 yield return new WaitForSeconds(时间); yield return new WaitForSecondsRealtime(时间);   每次启动定时器,都要开启一个协程,若开启协程任务太多,会造成程序卡顿。   3. Invoke Invoke("fun",dela

weixin_42186644的博客 1966

Unity游戏中的物体显示和隐藏以及使用Time类

在Unity游戏开发中,控制游戏物体的显示和隐藏是非常常见的需求。同时,使用Time类可以实现一些与时间相关的功能,比如延迟执行、定时器等。本文将详细介绍如何在Unity中实现物体的显示和隐藏,并演示如何使用Time类来控制时间相关的功能。

MddAlgorithm的博客 1642

PythonWeb开发框架—Django之工程创建和models的定义和增删改查

文章介绍了Django工程的创建、models的定义和增删改查

weixin_42476668的博客 990

Unity定时器

Unity定时器

qq_58498259的博客 1390

科研党必备:用MATLAB批量处理.mat文件数据的3种高效方法

本文为科研人员提供了使用MATLAB批量处理.mat文件数据的三种高效方法,涵盖智能数据加载、专业可视化与自动化报告生成。通过构建自动化框架、多维度数据画图策略及批量处理流程,帮助用户显著提升数据处理效率与图表专业性,解决海量实验数据的管理与分析难题。

weixin_29089057的博客 71

Unity 常用脚本:定时器

public void Invoke(string methodName, float time); 摘要:Invokes the method methodName in time seconds. 以时间秒为单位调用方法methodName。 参数: methodName,方法名 time,等待时间 using System.Collections; using System....

JPF29 1912

2025年全国青少年信息素养大赛初赛真题(算法创意实践挑战赛C++初中组:文末附答案)

2025年全国青少年信息素养大赛初赛真题(算法创意实践挑战赛C++初中组:文末附答案)

王老师青少年编程 3396

YOLOv11改进策略【卷积层】| DEConv: 强度信息与梯度特征融合的细节增强 适用于小目标与细节目标检测任务

本文记录的是利用 模块优化 的目标检测网络模型。(Detail-Enhanced Convolution,细节增强卷积)的设计旨在,解决 目标检测网络中传统普通卷积缺乏目标细节相关先验、对小目标边缘、目标与背景边界等关键细节捕捉能力不足的问题,同时避免引入额外参数量与计算开销,以适配 对实时推理性能与检测精度的双重需求。DEA-Net: Single image dehazing based on detail-enhanced convolution and content-guided atte

Limiiiing的博客 1496

Unity 定时器的几种实现方法

1、利用帧 public float timer = 2.0f; // 定时2秒 void Update() { timer -= Time.deltaTime; if (timer <= 0) { doSomething(); timer = 2.0f; } }2、延迟调用 使用 MonoBehaviour.Invoke,延迟调

MaiYo_ 2万+

华为FusionCompute之计算虚拟化

华为FusionCompute之虚拟化

jks212454的博客 2452

Unity中几个延迟等待后运行函数的方法

转自 —Instagram老王大大 1.- Update函数 实现定时器 float m_timer = 0; void Update() { m_timer += Time.time; if (m_timer >= 5) { ShowB(); m_timer = 0; } } private void ShowB() {...

Chgmaker的博客 1万+

Codex 接入国产大模型完整指南:CC-Switch 与 Codex++ 的工程化选型

Codex 默认走 OpenAI Responses API,而 DeepSeek、GLM、Kimi 等国产模型只提供 OpenAI-compatible 的 Chat Completions——两套协议在消息结构、流式响应、reasoning 字段、tool call 上都不兼容,所以"改个 Base URL + 填国产 Key"这种朴素操作根本跑不通。本文从架构师视角出发,把 Codex 接入国产大模型这件事讲透:先剖析协议链路到底卡在哪,再对比 CC-Switch和 Codex++两套主流方案的差异

少说,多做 3853

泛微OA集成阿里云短信(E9保姆教程)

泛微OA集成阿里云短信(E9保姆教程)

技术分享 515

unity异步执行定时器(延迟执行)

3秒后跳转至登录场景 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class load : MonoBehaviour { // Use this for initialization void Start() { StartCoroutine(PlayerAttack

weixin_44305462的博客 756

Android-Zygote进程的诞生—从init到Zygote启动

Android Zygote进程启动流程解析 Android系统的Zygote进程是所有应用进程的父进程,由init进程创建。启动流程分为: 内核阶段:加载init进程(PID=1) init进程阶段: 挂载基础文件系统(tmpfs、proc等) 设置SELinux安全策略 解析init.rc配置文件 Zygote启动:init进程通过app_process启动Zygote,预加载系统资源 SystemServer:Zygote fork出系统服务进程 关键点: init是用户空间第一个进程......

保持专注,保持热爱 637

Unity高性能定时器框架设计:从原理到实战优化

在游戏开发中,定时器是控制时间逻辑的核心组件,其原理基于时间驱动的事件调度机制。通过统一接口抽象和时间片管理,定时器技术能够有效解耦业务逻辑与时间控制,提升代码的可维护性和模块化程度。在Unity开发中,原生定时方案如协程和Invoke存在性能开销与生命周期管理难题,而高性能定时器框架通过对象池和零分配优化,显著降低了GC压力,尤其适用于技能冷却、UI动画等高频场景。本文以Unity定时器优化为例,深入解析了对象池与生命周期集成的实现方案,为游戏性能优化提供了工程实践参考。

weixin_34378767的博客 388

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Unity通用框架搭建(一)—— Scheduler 定时器

本人是从事Unity客户端开发工作的,从本文开始将会记录一些在实际项目中用到的一些通用框架和功能组件,整理完善一套比较适用的基础框架(最近有空闲时间,将以前的项目的代码重构一下,如有不合适的地方请大神们多多指教) Single单例 之前在设计模式的学习中学习了单例模式,在实际开发中,我们也将经常访问一些全局唯一的数据或者某些操作的入口都是固定的。结合C#的泛型,我们可以设计泛型单例,让其子类直接能够实现单例模式,而不是每一块单例类都需要重新定义。 考虑可能会存在一些初始化的情况,因此设计一个IManage

布衣大侠的博客 1899

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

unity,invoke函数

Unity中的Invoke函数是一种用于延迟或重复执行某个方法的函数。它可以让你在指定的时间后执行一次方法,或者每隔一段时间重复执行该方法。比如,你可以使用Invoke函数来实现一个定时器功能,或者延迟一段时间后执行特定的操作,或者每隔一段时间执行某些操作。这个函数在游戏开发中非常常用,可以帮助开发者更方便地控制游戏的逻辑和操作。

qq_20179331的博客 1712
上一篇: unity简单示例——项目中检测FPS,考虑时间缩放的影响
下一篇: unity简单示例——引导聚合动画(shader+C#)
勤学者闯天涯
博客等级 码龄10年 25粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值