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.mzph.cn/diannao/21198.shtml

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

相关文章

【零基础AI】Windows下最易懂的Cuda+cudnn+PyTorch配置教程

【零基础AI】最易懂的Windows下CUDAcuDNNPyTorch配置教程 本文面向零基础的AI初学者以及迁移DL开发环境的相关人员,旨在通过最直观、最简洁的一条龙式图文配置教程,最大程度地降低学习门槛与迁移环境的成本。在配置工作开始之前,请务必检查确…

U-boot、linux内核、根文件系统移植以及程序

终于这几天把这个移植的流程过了一遍,所以特此回来总结。 U-boot移植 首先是U-boot移植。Linux 系统要启动就必须需要一个 bootloader 程序,也就说芯片上电以后先运行一段bootloader 程序。这段bootloader程序会先初始化DDR等外设,然后将Li…

算法-堆结构和堆排序

文章目录 本节大纲1. 堆结构2. 堆排序本节的代码实现合集 本节大纲 1. 堆结构 堆结构是为集合类里面的优先级队列来服务的 优先级队列其实就是顺序存储的二叉树结构, 我们的底层的源码里面是没有链式存储的二叉树的,二叉树的实现的细节是通过我们的数组来模拟实现的 底层的实现…

TFTP服务器

软件,客户端,服务器。是简单的文件传输文件。 1.TFTP服务器介绍 是简单的文件传输协议,是tcp/IP协议的一个用来在客户端与服务器之间进行简单文件传输的协议。端口号为69。每个服务器都有自己都端口号。 2.TFTP文件传输特点 3. 二:TFTP环境…

c++异常处理exception

// c中的异常处理 // 1.throw : 专门用于抛出异常,做出提示 // 2.try : 尝试运行可能会异常的代码 // 3.catch : 用于接收前面跑出来的异常并进行解决// 执行循序为: // try // { // throw ...; // 执行的代码中必须直接或者…

VRTK4教程 二:基本追踪

文章目录 untiyXR和UnityXRPluginFramwork使用方法: TrackedAlias使用方法使用技巧 untiyXR和UnityXRPluginFramwork 这两个用于跟踪头盔位置,其中UnityXR使用的是旧版API,另一个是新版API,两个我我们选一个即可 使用方法&#…

6.3 Go 结构体(Struct)

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【计算机毕设】SpringBoot校园资料分享平台的设计与实现 - 源码免费(私信领取)

免费领取源码 | 项目完整可运行 | v:chengn7890 诚招源码校园代理! 1. 研究目的 本项目旨在设计并实现一个基于SpringBoot的校园资料分享平台,以满足学生在学习过程中对资料分享和获取的需求。具体目标包括&#xff1a…

Java学习笔记 集合的使用

在实际的项目中开发过程中,会有很多的对象,如何高效、方便的管理这些对象,是影响程序性能与可维护性的重要环节。在Java语言中为这个问题提供了一套完美的解决方案,也就是接下来要介绍的集合框架。 1.1 集合框架的结构 从Collect…

都说美国去工业化了,那美国人都做什么工作啊?

美国,这个全球经济的重要参与者,经历了一场深刻的变革——去工业化。这一过程意味着,曾经以制造业为荣的美国,逐渐将重心转移到了其他领域。那么,美国人都做什么工作呢?让我们走近这位“经济体巨人”&#…

MySql 查询缓存

前言 MySQL的查询缓存(Query Cache)是一个在内存中存储SELECT语句及其结果集的机制,目的是避免对相同的查询进行重复的解析、编译和执行,从而提高数据库性能。 Mysql 结构图如下: 查询缓存的工作流程大致如下&#…

Java中连接Mongodb进行操作

文章目录 1.引入Java驱动依赖2.快速开始2.1 先在monsh连接建立collection2.2 java中快速开始2.3 Insert a Document2.4 Update a Document2.5 Find a Document2.6 Delete a Document 1.引入Java驱动依赖 注意&#xff1a;启动服务的时候需要加ip绑定 需要引入依赖 <dependen…

【魅力网页的背后】:CSS基础魔法,从零打造视觉盛宴

文章目录 &#x1f680;一、css基础知识⭐1. 认识css &#x1f308;二、选择器初级❤️id与class命名 &#x1f680;一、css基础知识 ⭐1. 认识css 概念 CSS(英文全称&#xff1a;Cascading Style Sheets)&#xff0c;层叠样式表。它是网页的装饰者&#xff0c;用来修饰各标签…

QT 使用信号和槽,让QLabel的内容实时与QLineEdit同步,类似vue框架的双向绑定

在窗口里放置一个单行文本编辑器&#xff08;QLineEdit&#xff09;和一个标签控件&#xff08;QLabel&#xff09;&#xff0c;实现的效果就是当编辑器的内容被编辑时&#xff0c;标 签控件同步显 示编辑控件里的内容 1&#xff09;当 lineEdit 控件被用户编辑时&#xff0c;它…

无人机路径规划:基于鸽群优化算法PIO的无人机三维路径规划MATLAB代码

一、无人机模型介绍 无人机三维航迹规划_无人机航迹规划-CSDN博客 二、部分代码 close all clear clc warning (off) global model global gca1 gca2 gca3 gca4 model CreateModel(); % Create search map and parameters load(BestPosition5.mat); load(ConvergenceCurve5…

四足机器人步态仿真(三)四足机器人基础步态仿真

观前提醒&#xff0c;本章主要内容为分析四足机器人步态实现和姿态控制&#xff0c;碰撞体积等程序 步态效果&#xff1a; 一、完整代码如下 # -*- coding: utf-8 -*-import pybullet as pimport timeimport numpy as npp.connect(p.GUI)p.createCollisionShape(p.GEOM_PLANE…

xLSTM: Extended Long Short-Term Memory

更多内容&#xff0c;请关注微信公众号&#xff1a;NLP分享汇 原文链接&#xff1a;xLSTM: Extended Long Short-Term Memory 论文链接&#xff1a;https://arxiv.org/pdf/2405.04517 为什么要在27年后提出新的LSTM呢&#xff1f; LSTM&#xff08;长短期记忆网络&#xff09…

Java 生成二维码底下带content

直接上代码&#xff1a;效果如下图 需引入 zxing生成二维码包 <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version></dependency><dependency><groupId>com.…

vue不同页面切换的方式(Vue动态组件)

v-if实现 <!--Calender.vue--> <template><a-calendar v-model:value"value" panelChange"onPanelChange" /></template> <script setup> import { ref } from vue; const value ref(); const onPanelChange (value, mod…

【Matplotlib作图-3.Ranking】50 Matplotlib Visualizations, Python实现,源码可复现

目录 03 Ranking 3.0 Prerequisite 3.1 有序条形图(Ordered Bar Chart) 3.2 棒棒糖图(Lollipop Chart) 3.3 点图(Dot Plot) 3.4 斜率图(Slope Chart) 3.5 杠铃图(Dumbbell Plot) References 03 Ranking 3.0 Prerequisite Setup.py # !pip install brewer2mpl import n…