【Unity入门】19.定时调用Invoke

news2024/12/23 0:52:19

【Unity入门】定时调用Invoke

    大家好,我是Lampard~~

    欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 

(一)计时器

(1)Invoke 单词调用

    计时器我们并不陌生,在cocos上有着schedule类是相似的。在Unity中给我们提供了Invoke相关的类来实现计时器功能

    首先我们熟悉的是单次延时调用方法Invoke

Unity 的 Invoke() 方法是一种用于延迟执行某个方法的方式。Invoke() 方法可以在指定的时间(以秒为单位)后执行指定的方法

Invoke() 方法的语法如下:

```

Invoke(string methodName, float time);

```

其中,`methodName` 是要执行的方法的名称,`time` 是要延迟的时间(以秒为单位)

    好,我们接下来就尝试在mainLogic中使用这个方法,我们在start方法中打印了当前时间,并Invoke调用了TryInvoke方法,在TryInvoke打印了被调用时候的时间

    代码很简单,需要注意的是Invoke传入的是函数名称,是一个字符串,每加双引号会报错

    void Start()
    {
        Debug.Log("当前的时间是" + Time.time);
        this.Invoke("TryInvoke", 2);
    }

    void TryInvoke()
    {
        Debug.Log("执行方法的时间是" + Time.time);
    }

    看看结果,确实是2秒后调用,没有问题。而且tryInvoke方法只执行一次

(2)InvokeRepeating 重复调用

    那我想重复调用行不行?想每隔两秒就执行一次。

    可以,那就需要用到了InvokeRepeating方法了

InvokeRepeating() 是 Unity 提供的一个定时器方法,用于在指定的时间间隔(以秒为单位)重复执行指定的方法。InvokeRepeating() 方法的语法如下:

```

InvokeRepeating(string methodName, float time, float repeatRate);

```

其中,`methodName` 是要执行的方法的名称,`time` 是要延迟的时间(以秒为单位),`repeatRate` 是重复执行的时间间隔(以秒为单位)

    可以看到,这个方法比起Invoke,只是多了一个重复执行的时间的参数,比如说,如果我想每两秒就执行一次,代码可以这样写:

    void Start()
    {
        Debug.Log("当前的时间是" + Time.time);
        this.InvokeRepeating("TryInvoke", 2, 2);
    }

    void TryInvoke()
    {
        Debug.Log("执行方法的时间是" + Time.time);
    }

    看看效果,果然就会被重复执行了: 

(3)IsInvoking 是否正在调用

    那比如说,现在是每2秒执行一次,我突然想让这个计时器停下来,比如如果玩家鼠标左键点击的时候,就让这个计时器停下需要怎么写呢?

    首先我们需要判定以下这个方法是否在计时器调用中,这个方法就是IsInvokeing

IsInvoking 是 Unity 提供的一个方法,用于判断某个方法是否正在被 Invoke 或 InvokeRepeating 方法调用。IsInvoking 方法的语法如下:

```

bool IsInvoking(string methodName);

```

其中,`methodName` 是要判断的方法名称

    所以我们可以在update方法中写一个监听鼠标点击的方法,然后在鼠标点击的时候判定这个方法是不是被计时器调用

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            if (this.IsInvoking("TryInvoke"))
            { 
                // 取消调用
            }
        }
    }

(4)CancelInvoke 取消调用

    下一步就是取消计时器的调用。unity也给我们提供了方法,就是CancelInvoke

CancelInvoke 是 Unity 提供的一个方法,用于取消某个方法的 Invoke 或 InvokeRepeating 方法调用。CancelInvoke 方法的语法如下:

```

void CancelInvoke();

void CancelInvoke(string methodName);

```

其中,第一个重载无参数,可以取消所有正在被 Invoke 或 InvokeRepeating 方法调用的方法;第二个重载需要传入要取消的方法名称,只能取消指定的方法调用

    可以看到,我们可以采取传参或者不传参的方式暂停计时器,不传参就会停止所有的计时器,这个方法有点暴力,因此我们还是精准一些,采用第二个方法试试看

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            if (this.IsInvoking("TryInvoke"))
            {
                Debug.Log("取消计时器");
                this.CancelInvoke("TryInvoke");
            }
        }
    }

    看看最后效果,到此我们就熟悉了unity常用的四个计时器:

(二)Demo电风扇

    学习了一个新方法怎么能够不写一个demo玩一下呢?

    接下来我们准备了一个电风扇模型,通过Inovke的方法来实现加速减速的效果,首先把这个风扇模型导入到项目中

    接下来我们把之前地球的RotateLogic脚本赋值给他,先让它转起来看看

     可以看到,它就快乐的转动起来了。但是看上去怪怪的,首先这个风扇也太慢了其次速度应该是慢慢加速上去的,而不是一运行就那么快

    那我们继续补充一下逻辑 :

    void Start()
    {
        this.speed = 0;
    }

    void Update()
    {
        this.transform.Rotate(0, this.speed * Time.deltaTime, 0);
        if (Input.GetMouseButtonDown(0))
        {
            this.InvokeRepeating("ChangeSpeed", 0, 1);
        }
    }

    void ChangeSpeed()
    {
        if (this.speed < 500) 
        {
            this.speed += 50;
        }
    }

    首先的默认速度是0,点击之后不间隔重复执行ChangeSpeed方法,修改速度的值,最后看看效果吧:

好啦今天就到这里,谢谢各位感谢阅读!!!
点赞,关注!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/467090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习 - 45.MMOE Gate 简单实现 By Keras

目录 一.引言 二.MMoE 模型分析 三.MMoE 逻辑实现 • Input • Expert Output • Gate Output • Weighted Sum • Sigmoid Output • 完整代码 四.总结 一.引言 上一篇文章介绍了 MMoE 借鉴 MoE 的思路&#xff0c;为每一类输出构建一个 Gate 并最终加权多个 Exper…

http---HTTP缓存

目录 1、缓存介绍 2、http缓存 3、强缓存 4、协商缓存 1、缓存介绍 缓存&#xff1a;存储将被用的数据&#xff0c;让数据访问更快。 缓存相关术语 命中&#xff1a;在缓存中找到了请求的数据不命中/穿透&#xff1a;缓存中没有需要的数据命中率&#xff1a;命中次数/总…

Yarn(Yet Another Reource Negotiator)另一个资源协调者

官网引用 总结性 产生的需求 YARN工作逻辑 通用的资源管理系统&#xff0c;为上一层应用提供统一的资源管理和调度。解决集群资源利用率&#xff0c;数据共享&#xff0c;资源管理统一问题&#xff0c;yarn取代Job Tracker角色 组件说明 Client 向RM提交任务&#xff0c;终…

1、软件测试概述

1、软件测试概述 一、软件生命周期二、软件开发模型1、瀑布模型2、增量模型3、原型模型4、敏捷开发 三、软件质量1、软件质量概念2、影响软件质量的因素 一、软件生命周期 软件生命周期分为多个阶段&#xff0c;每个阶段有明确的任务&#xff0c;通常&#xff0c;可将软件生命…

ARM寄存器组织

ARM有37个32位长的寄存器&#xff1a; 1个用做PC&#xff08;Program Counter&#xff09;&#xff1b; 1个用做CPSR(Current Program Status Register)&#xff1b; 5个用做SPSR&#xff08;Saved Program Status Registers&#xff09;&#xff1b; 30个通用寄存器。 AR…

Unity之OpenXR+XR Interaction Toolkit实现 射线和物体交互事件回调

前言 前面我们介绍了如何抓取物体&#xff0c;今天我们来说一下如何和3D的物体进行交互&#xff0c;得到接触的事件回调。 交互的两种方式&#xff1a; 1.直接抓取或者射线抓取物体&#xff0c;得到接触回调 2.射线或者手部触摸物体后&#xff0c;得到接触回调 准备工作 有了…

Android 10.0 设置默认launcher后安装另外launcher后默认Launcher失效的功能修复

1.前言 在10.0的系统rom定制化开发中,在系统中有多个launcher的时候,会在开机进入launcher的时候弹窗launcher列表,让用户选择进入哪个launcher,这样显得特别的不方便 所以产品开发中,要求用RoleManager的相关api来设置默认Launcher,但是在设置完默认Launcher以后,在安…

嵌入式软考备考_3 嵌入式操作系统概述

嵌入式操作系统概述 工作在嵌入式环境中的操作系统 Embedded Operating System。 嵌入式和一般操作系统区别&#xff1a; 非通用操作系统&#xff0c;用于完成特定功能&#xff1b;性能实时性能源可靠性要求高&#xff1b;占用资源少&#xff1b;可剪裁&#xff0c;可配置。…

渗透测试 | Web信息收集

0x00 免责声明 本文仅限于学习讨论与技术知识的分享&#xff0c;不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;本文作者不为此承担任何责任&#xff0c;一旦造成后果请自行承担…

《程序员面试金典(第6版)》面试题 16.04. 井字游戏(棋盘类问题,C++)

题目描述 设计一个算法&#xff0c;判断玩家是否赢了井字游戏。输入是一个 N x N 的数组棋盘&#xff0c;由字符" "&#xff0c;“X"和"O"组成&#xff0c;其中字符” "代表一个空位。 以下是井字游戏的规则&#xff1a; 玩家轮流将字符放入空位…

专门为麻醉科和手术室开发的:手术麻醉系统源码,系统稳定,功能完整,支持二次开发

手术麻醉系统源码&#xff1a;C# .net 桌面软件 C/S版 系统极其稳定&#xff0c;扩展性强&#xff0c;已在多家医院运营。 文末获取联系 手术麻醉信息管理系统是专门为麻醉科和手术室开发的围手术期临床信息管理系统&#xff0c;具备以下功能: 1.手术程管理系统整合了手术室、…

人工智能实践: 基于T-S 模型的模糊推理

模糊推理是一种基于行为的仿生推理方法, 主要用来解决带有模糊现象的复杂推理问题。由于模糊现象的普遍存在, 模糊推理系统被广泛的应用。模糊推理系统主要由模糊化、模糊规则库、模糊推理方法以及去模糊化组成, 其基本流程如图1所示。

C++(继承下)

目录&#xff1a; 1.继承与有元 2.继承与静态成员 3.单继承、多继承 4.如何定义一个不能被继承的类&#xff1f;&#xff1f; 5.分享有意思的一道题 6.菱形继承及菱形虚拟继承 --------------------------------------------------------------------------------------------…

【c语言】全局变量 | 局部变量的生命周期与作用域

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…

亚马逊云科技赋能客户,为海思科打造安全高效的营销业务中台系统

羽翼渐丰&#xff0c;翱翔云端 携手亚马逊云科技&#xff0c;打造互联网级企业解决方案 秉承“为客户创造价值”的理念&#xff0c;在公司发展过程中&#xff0c;博智信息先后服务了众多知名企业&#xff0c;客户行业覆盖制造、零售、餐饮、科技、电子等。经过近20年的发展&a…

AutoGPT 是 prompt 工程的下一个前沿

前言 最近了解到Auto GPT的上线&#xff0c;下面我来整理一下整个体验过程&#xff0c;希望对大家有所帮助和启发。 首先Auto GPT是 OpenAI 的 Andrej Karpathy 都在大力宣传的一个开源项目&#xff0c;他认为 AutoGPT 是 prompt 工程的下一个前沿。 近日&#xff0c;AI 界貌…

自助式数据分析平台:jvs数据智仓-统计报表的使用条件及界面介绍

统计报表界面介绍 统计报表是指利用表格和报表等形式&#xff0c;将数据以清晰的结构和布局的方式呈现出来&#xff0c;以便用户进行数据分析和决策制定的一种BI统计方法。表格式的BI统计通常采用交叉表格、分组表、报表等形式&#xff0c;对数据进行整合、分析和展示&#xff…

【数据库数据恢复】ndf文件损坏的SQL SERVER数据库数据恢复案例

数据库数据恢复环境&#xff1a; 某公司存储上部署SQL SERVER数据库&#xff0c;数据库中有1000多个文件&#xff0c;该SQL SERVER数据库每10天生成一个NDF文件&#xff0c;数据库包含两个LDF文件。 数据库故障&分析&#xff1a; 存储设备出现故障导致SQL SERVER数据库异常…

IDEA实用设置

1、设置全局编码统一为UTF-8 file>setting中搜索框输入file encoding修改格式为UTF-8 2、设置文字大小 file>setting中搜索框输入font修改字体大小 3、配置maven file>setting中搜索框输入maven修改maven的路径、conf文件、文件仓库 4、idea中实现Serializable提示…

RabbitMQ通讯方式

RabbitMQ通讯方式 RabbitMQ提供了很多中通讯方式&#xff0c;依然可以去官方查看&#xff1a;https://rabbitmq.com/getstarted.html 七种通讯方式 1 RabbitMQ提供的通讯方式 Hello World!&#xff1a;为了入门操作&#xff01;Work queues&#xff1a;一个队列被多个消费者…