您的位置:首页 > 移动开发 > Unity3D

[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>延时一段时间
<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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息