Coroutines & Yield

转自:http://hi.baidu.com/cartoonboy/blog/item/03ef2add5248a2d58d1029b6.html

在编写游戏代码的时候,常常需要处理一系列事件。如:
Private Update()
{
if(state == 0)
{
   state = 1;
   return;
}
if(state == 1)
{
   state = 2;
   return;
}
}
更方便的是使用yield语句。yield语句是一个特殊类型的返回,他确保在下次调用时该函数继续从该yield语句之后执行。
while(true)
{
// 做步骤1
yield; // 等待一帧
// 做步骤2
yield; // 等待一帧
}
你也可以传递特定的值给yield语句来延迟Update函数的执行,直到一个特定的事件发生。
// 做一些事儿
yield WaitForSeconds(5.0); // 等待5秒
// 做其他事儿
可以叠加和连接coroutines。
这个例子执行Do,在调用之后立即继续。
Do();
print("this is printed immedinately");

function Do()
{
print("do now");
yield WaitForSeconds(2);
print("Do 2 seconds later");
}
这个例子将执行Doo并等待它完成,再继续执行自己。
yield StartCoroutine("Doo");
print("Also after 2 seconds");
print("This is after the doo coroutine has finished execution");
function Doo()
{
print("Doo now");
yield WaitForSeconds(2);
print("Doo 2 seconds later");
}
任何事件处理句柄都可以是一个coroutine。
注意:不能在Update或FixedUpdate内使用yield。但是你可以使用StartCoroutine来开始一个函数。

你可能感兴趣的:(coroutine)