Unity 协程、模拟协程
理解协程
IEnumerator+yield 强大的迭代器
IEnumerator 就是一个函数容器 里面保存了一个一个的函数
IEnumator会依次执行每个函数 而每个函数都有一个返回值 保存在IEnumator.Currect里面
看下面这个例子
IEnuermator start_Coroutine(){Debug.Log("HellWord");yield return 1;Debug.Log("HellWod!!!");yield return "abc";
}
yield就是从开始到yield之间的代码做成一个函数 实际上可以理解为yield就是如下
function (){Debug.Log("HellWord");return 1;
}
function (){Debug.Log("HellWord!!!");return "abc";
}
启动协程 this.StartCoroutine(e);
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class IECoroutine : MonoBehaviour
{void Start(){IEnumerator e = this.start_Coroutine();this.StartCoroutine(e);}IEnumerator start_Coroutine(){Debug.Log("HellWord");yield return 1;Debug.Log("HellWod!!!");yield return "abc";}
}
yield return null;11下一帧再执行后续代码
yield return 0;1/下一帧再执行后续代码
vield return 6:/1任意数字)下一帧再执行后续代码
vield break;1/直接结束该协程的后续操作
yield return asyncOperation://等异步操作结束后再执行后续代码
vield return StartCoroution(/*某个协程*八://等待某个协程执行完毕后再执行后续代码
yield return www0://等待www操作完成后再执行后续代码
vield return new WaitForEndOfFrame()://等待帧结束,等待直到所有的摄像机和GU被渲染完成后,在该帧显示在屏幕之前执行
yield return new WaitForseconds(0.3f)://等待0.3秒,一段指定的时间延迟之后继续执行,在所有的Update函数完成调用的那一帧之后(这里的
间会受到Time.timescale的影响)
vield return new WaitForSecondsRealtime(0.3f)://等待0.3秒,一段指定的时间延迟之后继续执行,在所有的Update函数完成调用的那一帧之后
(这里的时间不受到Time.timescale的影响);
yield return WaitForFixedUpdate()://等待下一次Fixedupdate开始时再执行后续代码
vield return new WaitUntil0//将协同执行直到 当输入的参数(或者委托)为true的时候
yield return new Waitwhile0//将协同执行直到 当输入的参数(或者委托)为false的时候
模拟协程实现过程
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class IECoroutine : MonoBehaviour
{IEnumerator ie = null;void Start(){ie = this.start_Coroutine();}IEnumerator start_Coroutine(){Debug.Log("HellWord");yield return 1;Debug.Log("HellWod!!!");yield return "abc";}void LateUpdate(){if (this.ie != null){if (!this.ie.MoveNext()){this.ie = null;}else{Debug.Log("ie.Current = " + ie.Current);}}}
}
输出结果如下
IEnumerator.MoveNext:执行当前函数 并将返回值存储到IEnumerator.Current里面 并把函数索引拨动到下一个 如果执行到头了 没有可执行的函数了 IEnumerator.MoveNext就会返回false
模拟协程等待时间
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class IECoroutine : MonoBehaviour
{IEnumerator ie = null;void Start(){ie = this.start_Coroutine();}IEnumerator start_Coroutine(){Debug.Log("HellWord");yield return 1;Debug.Log("HellWod!!!");yield return "abc";Debug.Log("开始等待3秒");yield return new ClassWaitForTime(3);Debug.Log("等待3秒结束");}void LateUpdate(){if (this.ie != null){if (this.ie.Current is ClassWaitForTime){ClassWaitForTime cw = ie.Current as ClassWaitForTime;cw.Update(Time.deltaTime);if (!cw.IsOver()){//时间未到则停止往下继续执行return;}}if (!this.ie.MoveNext()){this.ie = null;}else{Debug.Log("ie.Current = " + ie.Current);}}}
}class ClassWaitForTime
{private float total;private float nowtime;public ClassWaitForTime(float time){this.total = time;this.nowtime = 0;}public void Update(float time){this.nowtime += time;}public bool IsOver(){return this.nowtime >= this.total;}
}
输出结果如下
Unity 协程、模拟协程相关推荐
- python用于pmc排产可以吗_PMC生产排程——模拟排程
永凯PMC的使用界面功能,通过每天从ManBase MRP II系统获取客户的订单.永凯PMC安排整个冲压部的客户订单,分配相应的机器和模具加工客户订单.永凯PMC提供了可视性,管理按部门之间的相互关 ...
- Unity中迭代器和协程的部分概念
协程本质上也是一个迭代器,为了记录一下今天对二者的学习和巩固记录一下今天的知识点. 首先了解一下迭代器的知识: 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露 ...
- Unity 之 关于停止协程的五种方式解析
Unity 之 关于停止协程的五种方式解析 前言:了解协程 方式一:函数的方式 方式二:函数名的方式 方式三:接收返回值 方式四:StopAllCoroutines 方式五:禁用/销毁游戏对象 本文小 ...
- unity update 协程_Unity 协程的原理
Unity 协程的原理 发布时间:2019-06-13 18:45, 浏览次数:1118 , 标签: Unity 协程不是多线程,协程还是在主线程里面(注:在Unity中非主线程是不可以访问Unity ...
- python协成_Python协程(上)
几个概念: event_loop 事件循环:程序开启一个无限的循环,程序员会把一些函数注册到事件循环上.当满足事件发生的时候,调用相应的协程函数. coroutine 协程:协程对象,指一个使用asy ...
- 深入并发线程、进程、纤程、协程、管程与死锁、活锁、锁饥饿详解
一.进程.线程.纤程.协程.管程概念理解 在现在你可能会经常看到进程.线程.纤程.协程.管程.微线程.绿色线程....一大堆xx程的概念,其实这些本质上都是为了满足并行执行.异步执行而出现的一些概念. ...
- 进程、线程、协程和管程的区别
大家都知道,计算机是为了模拟现实世界,其中计算机领域最伟大的发明之一就是操作系统.操作系统对于计算机来说是其核心的存在,可以说操作系统的地位就像计算机的灵魂一样.操作系统的诞生是为了运行用户程序,事实 ...
- Linux高性能网络:协程系列09-协程性能测试
目录 Linux高性能网络:协程系列01-前言 Linux高性能网络:协程系列02-协程的起源 Linux高性能网络:协程系列03-协程的案例 Linux高性能网络:协程系列04-协程实现之工作原理 ...
- Linux高性能网络:协程系列08-协程实现之调度器
目录 Linux高性能网络:协程系列01-前言 Linux高性能网络:协程系列02-协程的起源 Linux高性能网络:协程系列03-协程的案例 Linux高性能网络:协程系列04-协程实现之工作原理 ...
最新文章
- webstorm代码行数统计_10万行代码10万年薪,利用python查看自己写了多少代码
- 常见Python爬虫工具总结
- 使用DPAPI加密或解密你的数据
- (王道408考研操作系统)第一章计算机系统概述-第一节4:中断和异常
- 网盘大战-各网盘使用测试
- Linux输入子系统学习笔记
- HTML列表、表格、表单、超链接、音视频标签、内嵌
- 什么是P2P和它的应用
- BibTex中参考文献种类
- 修改element插件样式---select样式
- 《OpenGL ES 3.x游戏开发(下卷)》一2.3 风吹椰林场景的开发
- 计算机组装实验硬盘分区方法,硬盘怎么分区和格式化 史上最详细的硬盘分区方法大全 (全文)...
- UV/PV 的共同点和区别
- 查准率(Precision),灵敏性(Sensitivity),特异性(Specificity),F1,PR曲线,ROC,AUC
- Unity3d坦克大战联网
- 中国传统色的魅力|这8组中国风传统颜色你一定要收藏
- 如何用建木CI更新七牛云CDN证书
- python制作词典软件_Python爬虫之二:自制简易词典
- javaScript模拟实现call
- 栈和队列——构造数组的MaxTree(java实现)