【unity知识点】实现延迟调用——InvokeRepeating Invoke CancelInvoke Coroutine使用介绍

文章目录

  • InvokeRepeating Invoke CancelInvoke
  • Coroutine
    • 1. 使用协程(Coroutine)实现类似Invoke的延迟调用:
    • 2. 要使用协程(Coroutine)来实现类似于`InvokeRepeating`的重复调用效果
    • 3. 区别
    • 4. 补充
  • 完结

InvokeRepeating Invoke CancelInvoke

当需要在Unity中实现延迟调用的功能时,你可以使用InvokeRepeatingInvokeCancelInvoke和协程(Coroutine)来完成。下面是它们的具体示例用法:

  1. 使用InvokeRepeating方法实现重复调用:
using UnityEngine;public class ExampleScript : MonoBehaviour
{void Start(){InvokeRepeating("MethodName", 2f, 1f);}void MethodName(){Debug.Log("Repeatedly called every 1 second");}
}

上述示例中,MethodName方法会在启动2秒后开始被重复调用,并且每隔1秒执行一次。

  1. 使用Invoke方法实现延迟调用:
using UnityEngine;public class ExampleScript : MonoBehaviour
{void Start(){Invoke("MethodName", 3f);}void MethodName(){Debug.Log("Delayed method call after 3 seconds");}
}

上述示例中,MethodName方法会在启动后延迟3秒进行一次调用。

  1. 使用CancelInvoke方法取消调用:
using UnityEngine;public class ExampleScript : MonoBehaviour
{void Start(){InvokeRepeating("MethodName", 2f, 1f);Invoke("CancelMethod", 5f);}void MethodName(){Debug.Log("Repeatedly called every 1 second");}void CancelMethod(){Debug.Log("Cancelled the repeating method call");CancelInvoke("MethodName");}
}

上述示例中,CancelMethod方法会在启动后延迟5秒被调用,并且会取消之前通过InvokeRepeating方法设定的重复调用。

Coroutine

1. 使用协程(Coroutine)实现类似Invoke的延迟调用:

使用协程(Coroutine)实现延迟调用:

using UnityEngine;public class ExampleScript : MonoBehaviour
{IEnumerator Start(){yield return new WaitForSeconds(2f);MethodName();}void MethodName(){Debug.Log("Delayed method call after 2 seconds");}
}

上述示例中,通过使用协程的方式实现了在启动2秒后执行MethodName方法的延迟调用。

以上是使用InvokeRepeatingInvokeCancelInvoke和协程(Coroutine)实现延迟调用的示例。你可以根据具体需求选择最合适的方法来实现你的功能。

2. 要使用协程(Coroutine)来实现类似于InvokeRepeating的重复调用效果

要使用协程(Coroutine)来实现类似于InvokeRepeating的重复调用效果,你可以使用yield return new WaitForSeconds语句来控制协程的执行间隔。下面是一个示例:

using UnityEngine;public class ExampleScript : MonoBehaviour
{IEnumerator Start(){while (true){yield return new WaitForSeconds(1f);MethodName();}}void MethodName(){Debug.Log("Repeatedly called every 1 second");}
}

上述示例中,Start方法作为协程被启动后,会进入一个无限循环。在每次循环中,通过yield return new WaitForSeconds(1f)语句等待1秒后,再调用MethodName方法。这样就实现了类似于InvokeRepeating方法的重复调用效果。

3. 区别

在某些情况下,协程和Invoke(或InvokeRepeating)方法实现的功能可以相互替代。但是,它们之间存在一些重要的区别。

  1. 语法:协程使用了yield语句来控制代码执行流程,而Invoke方法则直接传递方法名和延迟时间作为参数。

  2. 精度:协程的精度更高,因为它们可以在每一帧之后或者指定的时间间隔之后执行代码。而Invoke方法则受到Unity的帧率限制,可能无法达到非常精准的时间间隔。

  3. 可读性:协程通常比Invoke方法更加可读,因为它们可以使用常规的控制流结构(例如if语句和for循环)来组织代码,而不是依赖回调函数。

  4. 功能:协程在处理复杂的逻辑和异步操作时更加方便。例如,协程可以用于在后台加载资源、等待用户输入、等待网络请求响应等。

综上所述,虽然协程和Invoke方法可以实现类似的效果,但它们在实际应用中有不同的优势和劣势。在选择使用哪种方法时,你需要权衡各种因素,如代码可读性、精度、复杂性等。

4. 补充

# 开始协程:
private Coroutine myCoroutine;
myCoroutine = StartCoroutine(MyCoroutine());# 停止协程:
StopCoroutine(myCoroutine);# 停止名为 "Start" 的协程
StopCoroutine("Start");# 停止当前对象上所有正在运行的协程
StopAllCoroutines();

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

golang编译失败:import cycle not allowed

在开发golang项目的时候,遇到了一个问题,在编译的时候,报错 原因,循环引入包 ginchat/models里面的问题 正常情况下 A包调用了B包,但是B包就不能再去调用A包了,这样就会报错 查看代码 utils调用了models包 而models包中又调用了utils包 解决办法一: 修改一下逻辑,尽量不让…

建立网络矩阵:选择迅腾文化提供定制集成化服务、专业团队支持与拓展销售渠道

建立网络矩阵:选择迅腾文化提供定制集成化服务、专业团队支持与拓展销售渠道 在当今高度互联的数字时代,网络矩阵已成为企业常态化运营工具。网络矩阵不仅仅是一个单一的网站,而是由多个相互关联的数字资产组成的整体结构,包括官…

K8S本地开发环境-minikube安装部署及实践

引言 在上一篇介绍了k8s的入门和实战,本章就来介绍一下在windows环境如何使用minikube搭建K8s集群,好了废话不多说,下面就和我一起了解Minikube吧。 什么是Minikube? Minikube 是一种轻量级的 Kubernetes 实现,可在本…

C语言 指针学习总结

C语言学习! 目录 前言 一、指针是什么? 1.1 指针变量 1.2 取地址运算符和间接寻址运算符 二、指针变量的大小 三、指针和指针类型 四、指针和函数 五、野指针 5.1 野指针成因 1. 指针未初始化 2. 指针越界访问 3. 指针指向的空间释放 5.2 如…

大创项目推荐 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满…

中国银行 企业网上银行 相关注意事项合辑 不断更新中...

中国银行 企业客户网银登录 登录时需已安装 Windows 或 Mac “网上银行登录安全控件”, 并已阅读和同意 《中国银行电子银行客户安全服务保障须知》 。网银用户首次登录时,请使用柜台注册时获取的"网银登录用户名"登录。首次登录成功后&#x…

python使用动态规划解决不同路径问题

针对二维动态规划,还有一个问题就是关于求不同路径的实例,主要是说明在实际应用的场景中,要理解透彻实际问题的真正目的,就可以灵活实现代码编写。 对于求不同路径问题描述,对于一个机器人,处在一个mxn的网…

Jenkins怎么配置Publish over SSH,配置SSH Servers连接的两种方式

一、前提条件 jenkins必须已经安装好了publish over ssh的插件 二、方式一(使用密码连接) 1.打开Manager Jenkins的System配置 2.找到Publish over SSH配置项,点击add SSH Server增加一个ssh连接配置 3.填写ssh基本配置 4.点击高级,配置密码 5.点击 Test Configuration…

Maven 整理(含面试题)

Maven是Java 项目必备,Maven 主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。项目构建工具 、更好的管理依赖 目录 Maven安装与运行maven 重要知识点面试题 Maven安装与运行 Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理…

sql——窗口范围之partition by 与 order by

partition by 关键字 partition by 在开窗函数中,常用于表示某个分区,规则了数据的范围 order by 关键字 order by 常用于对分区内的数据进行排序,常见的情况下,order by还能规定sql语句的影响范围。 rows between unbounded …

【Python排序算法系列】—— 插入排序

​ ​ 🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 2023年度总结→ http://t.csdnimg.cn/yIeru 目录 插入排序 理解 过程演示: 插…

C语言:二分查找查找有序数组中的元素

前言 在我们学习C语言的过程中,如果要查找一个数组当中是否存在某一个元素,我们可能会遍历整个数组,来依次判断是否存在这个函数,但这么做是效率极低的,如果数组中有很多个元素,那么我们要查找半天 二分查…