[Unity-22] Coroutine协程浅析
2015-03-19 11:22
323 查看
1.概念解释
协程并不是一个独立的线程,在Unity中,所有的语句都是在一个线程中执行的,也就是说,Unity是单线程的(具体的可以参见http://blog.csdn.net/alexander_xfl/article/details/41577625,这里面有对单线程的粗略讲解)。
那么协程到底是什么呢?
官方的定义是这样的:
A coroutine is a function that is executed partially and, presuming suitable conditions are met, will be resumed at some point in the future until its work is done
.协程是一个分部执行,遇到条件(yield return 语句)会挂起,直到条件满足才会被唤醒继续执行后面的代码。
实际上协程在后台与Update的执行原理是一样的,每一帧都会去判断是否满足执行条件,并据此判断是否执行。
[b]2.作用与用法
[/b]
a>延时一段时间
后面的代码会在延时5秒之后执行
b>等待其他事件完成
执行Fun后,输出顺序为:3 1 2 4
c>开启一个伪线程做其他工作
执行Fun后,输出顺序为:3 1 4 2
d>等一帧
e>等待下载完成
不再执行后续语句
这里只是对Unity协程进行了简单的介绍和基本用法分析,其实网上已经有了一些对Unity协程更透彻的分析,例如http://dsqiu.iteye.com/blog/2029701?utm_source=tuicool
协程并不是一个独立的线程,在Unity中,所有的语句都是在一个线程中执行的,也就是说,Unity是单线程的(具体的可以参见http://blog.csdn.net/alexander_xfl/article/details/41577625,这里面有对单线程的粗略讲解)。
那么协程到底是什么呢?
官方的定义是这样的:
A coroutine is a function that is executed partially and, presuming suitable conditions are met, will be resumed at some point in the future until its work is done
.协程是一个分部执行,遇到条件(yield return 语句)会挂起,直到条件满足才会被唤醒继续执行后面的代码。
实际上协程在后台与Update的执行原理是一样的,每一帧都会去判断是否满足执行条件,并据此判断是否执行。
[b]2.作用与用法
[/b]
a>延时一段时间
<span style="font-family:SimSun;">IEnumerator Fun() { yield returnnewWaitForSeconds(5.0F); //do something }</span>
后面的代码会在延时5秒之后执行
b>等待其他事件完成
<span style="font-family:SimSun;">IEnumerator Do() { print("1"); yield returnnewWaitForSeconds(2); print("2"); } IEnumerator Fun() { print("3") yield returnStartCoroutine(Do()); print("4"); }</span>
执行Fun后,输出顺序为:3 1 2 4
c>开启一个伪线程做其他工作
<span style="font-family:SimSun;">IEnumerator Do() { print("1"); yield return new WaitForSeconds(2); print("2"); } void Fun() { print("3"); StartCoroutine(Do()); print("4"); }</span>
执行Fun后,输出顺序为:3 1 4 2
d>等一帧
<span style="font-family:SimSun;">Ienumerator Do() { while(true) { print("happy"); yield return null;//等待这一帧结束 //yield return new WaitForFixedUpdate(); //等待所有脚本的fixedupdate执行完毕 //yield return new WaitForEndOfFrame(); } }</span>
e>等待下载完成
<span style="font-family:SimSun;">yield return new WWWContinue()</span>f>yield break
不再执行后续语句
这里只是对Unity协程进行了简单的介绍和基本用法分析,其实网上已经有了一些对Unity协程更透彻的分析,例如http://dsqiu.iteye.com/blog/2029701?utm_source=tuicool
相关文章推荐
- [Unity-22] Coroutine协程浅析
- Unity Learning for Day 22
- Unity Shader Example 22 (Simulate Projector)
- Unity Shader 学习笔记(22) Bloom效果
- 蓝鸥Unity开发基础二——课时22 ArrayList
- 关于android的adt升级到22以后unity不能编译的解决办法~
- 找规律 0 1 3 8 22 64
- Unity AssetBundle爬坑手记
- Unity 物理碰撞检测
- [Unity] Shader - CG语言 流程控制语句
- unity3D游戏开发二之unity编辑器一
- unity还原three导出的json——基本模型,位移,旋转,缩放
- Unity将来时:IL2CPP是什么?
- 【小松教你手游开发】【游戏渲染】unity海边波浪效果的实现
- 心得22--JDK新特性6-反射1-反射入门及Class类
- C#编写Unity基础GUI之复合控件
- 「Unity」委托 将方法作为参数传递
- 4月17日全球域名商解析新增量22强:易名中国跌榜尾
- Unity 手机“摇一摇” 手机震动
- unity常见问题之20题