Unity3D协程yield的理解
Unity3D的协程概括地将就是:对于一段程序,你可以加上yield标明哪里需要暂停,然后在下一帧或者一段时间后,系统会继续执行这段代码。协程的作用:①延迟一段时间执行代码。②等某个操作完成之后再执行之后的操作。
总结起来就是一句话:控制一段代码在特定的时机执行。
Unity3D协程的核心在于“yield return"命令,这句代码的意义是马上停止当前函数,然后在下一帧中从这里重新开始。举个例子:
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class CoroutineCountdown : MonoBehaviour
{
public float floattimer;
public float timer; void Start()
{
StartCoroutine(Countdown());
} IEnumerator Countdown()
{
int seconds = ;
while (true)
{
//timer累加到1时,相当于运行了1秒后,会timer大于1,不会执行yield return 0,而结束循环
//接着执行second++;second通过log对用户可见,随着程序执行,每过1秒输出累加时间值1,2,3。。。
for (float timer = ; timer < ;)
{
yield return ;
timer += Time.deltaTime;
}
seconds++;
Debug.Log(seconds + " seconds have passed since the Coroutine started.");
}
}
}
在timer满足循环条件,即timer小于1时,会执行yield return 0,这时候会停止countdown函数,然后在下一帧中重新从yield处开始执行;所以在进入下一帧时会先在运行一次yield return 0语句,然后是timer+=Time.deltaTime,当timer大于1时,这时候不满足循环的判断条件,这时候会结束循环。接着运行下一行代码:second++,对Second累加1,并输出Log信息。
在Console窗口中会输出log信息,可见Second每秒累加1次。其实每次输出log信息时,
另外注意,结束一个协程需要使用协程函数的字符串形式:StopCoroutine("Countdown");
协程是 Unity 3D的一种官方的加载方式,好处是能让代码看起来更“同步”(sync)一些。协程不是线程,也不是异步执行(async)的。协程和 MonoBehaviour 的 Update函数一样也是在MainThread中执行的。使用协程你不用考虑同步和锁的问题。资源在 yield 返回后即可使用,代码比回调的方式容易组织。
Unity3D协程yield的理解的更多相关文章
- Unity3D 协程的介绍和使用
我是快乐的搬运工 http://blog.csdn.net/u011397120/article/details/61236055 ---------------------------------- ...
- U3D协程yield的使用和理解
部分内容参考网址:http://blog.csdn.net/huang9012/article/details/29595747 Win7+U3D 4.6.7 1.在c#中使用①首选需要定义一个返回值 ...
- Unity3D 协程 浅谈
协程 理解:协程不是线程,也不是异步执行(知道就行). 1.协程和MonoBehaviour的Update函数一样,也是在MainThread中执行的(一定得明白这句话意思). void Start ...
- [转]Unity3D协程介绍 以及 使用
作者ChevyRay ,2013年9月28日,snaker7译 原文地址:http://unitypatterns.com/introduction-to-coroutines/ 在Unity中,协 ...
- Unity3d 协程的注意问题(新手须注意,老手须加勉)
关于unity3d的协程,非常的好用,比如等待几秒执行,等待下一帧执行等! 但是也有潜在的问题: 1.协程是单线程的,在主线程中完成 2.如果发现yield, 那么这一帧会结束,那么等下一帧调用此脚本 ...
- Unity3d 协程
参考文章: http://blog.csdn.net/onafioo/article/details/48979939 http://www.cnblogs.com/zhaoqingqing/p/37 ...
- Unity3D协程
协程介绍 Unity的协程系统是基于C#的一个简单而强大的接口 ,IEnumerator,它允许你为自己的集合类型编写枚举器.这一点你不必关注太多,我们直接进入一个简单的例子来看看协程到底能干什么.首 ...
- Unity3D协程介绍 以及 使用
作者ChevyRay ,2013年9月28日,snaker7译 原文地址:http://unitypatterns.com/introduction-to-coroutines/ 在Unity中,协 ...
- python协程--yield和yield from
字典为动词“to yield”给出了两个释义:产出和让步.对于 Python 生成器中的 yield 来说,这两个含义都成立.yield item 这行代码会产出一个值,提供给 next(...) 的 ...
随机推荐
- 【转】WPS word 文档中的插入对象 为什么打不开
点击桌面左下角开始按钮--所有程序,找到wps office文件夹--wps office工具--配置工具--高级--兼容设置,否选兼容第三方软件.
- nginx日志 logrotate配置
nginx 日志 logrotate配置如下: /var/log/nginx/*.log { daily missingok rotate 20 compress delaycompress noti ...
- django 设置session过期时间
session的超时时间设置settings中SESSION_COOKIE_AGE=60*30 30分钟.SESSION_EXPIRE_AT_BROWSER_CLOSE False:会话cookie可 ...
- Maven工程控制台乱码问题(IDEA)
转自https://blog.csdn.net/love_live2/article/details/79311978 个人推荐使用文章中介绍的第三种方法,感觉挺好用的
- MySQL实现批量检查表并进行repair与optimize的方法
这篇文章主要介绍了MySQL实现批量检查表并进行repair与optimize的方法,结合实例形式分析了MySQL批量修复与优化表的相关技巧,需要的朋友可以参考下 本文实例讲述了MySQL实现批量检查 ...
- Python库 - Albumentations 图片数据增强库
Python图像处理库 - Albumentations,可用于深度学习中网络训练时的图片数据增强. Albumentations 图像数据增强库特点: 基于高度优化的 OpenCV 库实现图像快速数 ...
- vue项目性能优化,优化项目加载慢的问题
一. 对路由组件进行懒加载: 如果使用同步的方式加载组件,在首屏加载时会对网络资源加载加载比较多,资源比较大,加载速度比较慢.所以设置路由懒加载,按需加载会加速首屏渲染.在没有对路由进行懒加载时,在C ...
- Smartforms
Include text Populate indicator in program perform get_text using '0002' ls_detail-vbeln"Header ...
- centos7 安装部署gitlab
Gitlab官网地址:https://about.gitlab.com/downloads/ Linux系统环境: Centos7 gitlab服务安装之前需要安装一些依赖包:yum install ...
- taro安装使用 Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime (64)错误
1. 安装node.js 官网下载:https://nodejs.org/en/ 下载推荐版本: 2. Npm安装慢,可以使用cnpm,安装淘宝镜像: npm install -g cnpm - ...