协程 Coroutines

协程调用,是 Unity 中常用的一个技巧;

既然是 Junior Programmer 课程,这里我们也只能简单的去理解和总结一下。

1.使用场景

协程的使用场景是:

  • 有个事情,我想下次再做;或:
  • 有个事情,我想等会儿在做;或:
  • 有个事情,我不想现在一次性做完;

如下可示意:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//下次做(所谓的下次做,即下一帧做)
void DoSomethingNextTime(){
yield return null; //现在先结束工作吧
//do something
//...
}

//隔一段时间再做
void DoSomethingDelay(float delay){
yield return new WaitForSeconds(delay); //现在先结束工作吧, delay秒后再回来继续
//do something
//...
}

//分段做事情
void DoSomethingApart(){
//do something part1
//...
yield return new WaitForSeconds(2.5f); //做完第1部分工作后结束, 2.5秒后再回来继续
//do something part2
//...
}

而调用的时候,需要使用 StartCoroutine() 来调用;

如下可示意:

1
2
3
4
5
6
//调用下次做的协程
StartCoroutine(DoSomethingNextTime());
//调用隔段时间做的协程
StartCoroutine(DoSomethingDelay(0.5f));
//调用分段做的协程
StartCoroutine(DoSomethingApart());

以上。

2.稍许深入

协程常与循环结合,产生一个持续性渐变效果。

例如:

1
2
3
4
5
6
7
8
9
10
11
//实现渐隐效果
IEnumerator Fade()
{
for (float ft = 1f; ft >= 0; ft -= 0.1f)
{
Color c = renderer.material.color;
c.a = ft;
renderer.material.color = c;
yield return new WaitForSeconds(.1f);
}
}

以上。

3.尾注

可参考以下文档,深入了解协程:

以上。