Unity协程详解

什么是协程

协程,即Coroutine(协同程序),就是开启一段和主程序异步执行的逻辑处理,什么是异步执行,异步执行是指程序的执行并不是按照从上往下执行。如果我们学过c语言,我们应该知道,程序的执行按照从上往下的顺序依次执行,一个操作完成之后才能执行下一个操纵,也就是同步执行。而异步执行则是我们在执行一个操作的同时,也会同时执行其他的操作。

比如说我们在执行一个函数的时候,按照同步执行的逻辑,我们只有在执行完这个函数之后才能继续后面的操作,而异步执行在执行这个函数同时,也可以同步执行其他的函数,不必等待当前函数操作完成。

之后就可以通过不同的yield指令把我们的代码穿插在我们的代码生命周期中

开启协程

开启协程的格式为:

IEnumrator 函数名(形参表)  //最多只能有一个形参

{   

    yield return xxx; //恢复执行条件

    //方法体

}

这个yield return xxx是指满足xxx的条件之后在执行下面的操作,否则就暂时挂起

下面举个例子

public class test : MonoBehaviour
{void Start(){StartCoroutine(Printf1());Debug.Log(1);StartCoroutine(Printf3());}private IEnumerator Printf1(){Debug.Log(2);yield return 0;}private IEnumerator Printf3(){Debug.Log(3);yield return 0;}
}

运行结果

代码中yield return 0是指等待一帧的时间,也就是在执行完Printf1之后暂时挂起,等待一帧的时间,去执行主程序的操作,也就是输出1,然后在执行Printf3。这个一帧是指Update函数中一帧,并且Start函数是先于Update函数的。所以执行结果为2,1,3

yield return 0和yield return null是同一个意思,都是等待一帧的效果。

关闭协程

结束协程有两种情况:

当协程的方法体执行完毕将会自动结束

调用StopCoroutine();方法中止协程执行

终止协程有两种情况

中止所有协程:StopAllCoroutines();

使用对象实例中止指定协程

yield语句

下面是一些常见的yield语句

 

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

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

相关文章

ctfshow-web入门-信息搜集(web11-web20)

目录 1、web11 2、web12 3、web13 4、web14 5、web15 6、web16 7、web17 8、web18 9、web19 10、web20 1、web11 域名其实也可以隐藏信息,比如flag.ctfshow.com 就隐藏了一条信息 查询域名的 DNS 记录,类型为 TXT(域名的说明&#…

三天不调休!端午节营销活动规划

今年端午节即将来临,大家将享受到一个三天不调休的小假期。这对各大企业来说,无疑是进行营销的黄金时机。企业可以精心策划和筹备各种具有端午特色的营销活动,吸引广大消费者参与,塑造浓厚的节日氛围,有效提升企业的销…

【Linux】使用 s3fs 挂载 MinIO 桶

s3fs(S3 File System)是一个基于FUSE(Filesystem in Userspace)的用户空间文件系统,可以将Amazon S3存储桶挂载到本地文件系统。通过s3fs,我们可以像操作本地文件一样,对S3存储桶中的数据进行读…

【随笔】Git 实战篇 -- 开心 commit 之后,发现有一处bug还需要改,只能 reset 撤销然后再次提交 -- git reset --(四十三)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

【数据结构】复杂度的重要性—–决定程序运行的效率

【数据结构】复杂度的重要性—–决定程序运行的效率 前言 在我们写算法的时候,常常会需要考虑一个问题:这个算法好不好?而这个“好”实际上就取决于是算法的复杂度。 算法复杂度(Algorithmic Complexity)是指算法在编…

私有仓库搭建

目前市面上比较常见的私有仓库搭建方法为: 通过 Sinopia 或 verdaccio 搭建(Sinopia 已经停止维护,verdaccio 是 Fork 自 Sinopia,基本上大同小异),其优点是搭建简单,不需要其他服务。通过 cnp…

代码随想录--哈希表--两数之和

题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums [2, 7, 11, 15], t…

【JAVA SE】抽象类和接口

✨✨欢迎大家来到Celia的博客✨✨ 🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉 所属专栏:JAVA 个人主页:Celias blog~ 目录 引言 一、抽象类 1.1 抽象类的定义 1.2 抽象方法 1.3 抽象…

【vue实战项目】通用管理系统:作业列表

目录 目录 1.前言 2.后端API 3.前端API 4.组件 5.分页 6.封装组件 1.前言 本文是博主前端Vue实战系列中的一篇文章,本系列将会带大家一起从0开始一步步完整的做完一个小项目,让你找到Vue实战的技巧和感觉。 专栏地址: https://blog…

springboot 实现kafka多源配置

文章目录 背景核心配置自动化配置类注册生产者、消费者核心bean到spring配置spring.factoriesyml配置使用 源码仓库 背景 实际开发中,不同的topic可能来自不同的集群,所以就需要配置不同的kafka数据源,基于springboot自动配置的思想&#xf…

Centos 7下的VulFocus靶场搭建详细教程

一、靶场介绍 自带 Flag 功能:每次启动 flag 都会自动更新,明确漏洞是否利用成功。带有计分功能。兼容 Vulhub、Vulapps 中所有漏洞镜像。 二、下载安装 下载 VMware 软件下载 centos镜像 三、Docker知识 学习链接:https://www.runoob.c…

如何在路由器上安装代理服务:详细教程

如何在路由器上安装代理服务:详细教程 步骤一:通过漏洞进入路由器系统开启Telnet服务使用Telnet登录路由器系统查看系统信息和CPU信息步骤二:交叉编译MIPS程序 Go对MIPS的支持 安装TFTP Server使用BusyBox tftp传输文件在路由器系统中下载编译…

linux进程加载和启动过程分析

我们的源代码通过预处理,编译,汇编,链接后形成可执行文件,那么当我们在终端敲下指令$ ./a.out argv1 argv2 后,操作系统是怎么将我们的可执行文件加载并运行的呢? 首先知道,计算机的操作系统的启动程序是写死在硬件上的,每次计算机上电时,都将自动加载启动程序,之后…

四、.Net8对接Ollama实现文字翻译(.Net8+SemanticKernel+Ollama)本地运行自己的大模型

.Net8SemanticKernelOllama 一、Semantic Kernel官方定义SK能做什么? 二、基本使用1、普通对话2、使用插件实现文本翻译功能 三、IChatCompletionService、ITextGenerationService、ITextEmbeddingGenerationService 很多情况都有这样的需求,使用自有系统…

运筹学_5.动态规划

文章目录 引言5.1 动态规划的基本概念首先明确什么是多阶段决策问题 5.2 动态规划的最短路径问题贝尔曼最优化原理建立动态规划模型的步骤 5.3 动态规划的投资分配问题投资分配问题定义投资分配问题的数学模型 5.4 动态规划的背包问题背包问题定义背包问题数学模型 引言 动态规…

Java——二进制原码、反码和补码

一、简要介绍 原码、反码和补码只是三种二进制不同的表示形式,每个二进制数都有这三个形式。 1、原码 原码是将一个数的符号位和数值位分别表示的方法。 最高位为符号位,0表示正,1表示负,其余位表示数值的绝对值。 例如&…

前端JS必用工具【js-tool-big-box】学习,检测密码强度

js-tool-big-box 前端工具库,实用的公共方法越来越多了,这一小节,我们带来的是检测密码强度。 我们在日常开发中,为了便于测试,自己总是想一个简单的密码,赶紧输入。但到了正式环境,我们都应该…

智能售货机的小投入大回报创业机遇

智能售货机的小投入大回报创业机遇 在当今这个快速进化的数字时代,智能售货机作为零售领域的新秀,正以其独特的便捷性和创新性逐步重塑传统零售格局。24小时不间断服务与自动化管理的结合,大幅度削减人力成本,使得智能售货机成为…

电脑突然提示:“failed to load steamui.dll”是什么情况?分享几种解决steamui.dll丢失的方法

相信有一些用户正在面临一个叫做“failed to load steamui.dll”的问题,这种情况多半发生在试图运行某个程序时,系统会提示一条错误消息:“failed to load steamui.dll”。那么,为何steamui.dll文件会丢失,又应该如何解…

Linux 使用 yum安装 ELK服务,yum 安装elasticsearch和Kibana(未写完)

文章目录 环境准备ELK组件介绍安装Elasticsearch安装Kibana 丢弃下载ELK 服务安装包Elasticsearch安装 Tips:关闭elasticsearch https修改 es 启动内存 环境准备 ELK组件介绍 ElasticSearch : 是一个近实时(NRT)的分布式搜索和分析引擎&…