Unity-协同程序原理

Unity-协同程序原理_第1张图片

 知识点一 协程的本质

Unity-协同程序原理_第2张图片

知识点二 协程本体是迭代器方法的体现

Unity-协同程序原理_第3张图片

 1、协程函数本体

定义一个协程函数、以及一个类:

Unity-协同程序原理_第4张图片

 我们如果单独的调用协程Test函数的话,不会执行任何语句。

Unity-协同程序原理_第5张图片

 没有任何输出。Unity-协同程序原理_第6张图片

 为什么我们无法单独调用协程函数,需要用StartCoroutine()函数?

因为此时Test内的函数没有真正被执行,它只是返回了一个迭代器的对象。

Unity-协同程序原理_第7张图片

 我们可以将这个对象存起来,并且不通过协程调度器去执行它。

Unity-协同程序原理_第8张图片

 IEnumerator内部方法,属性如下。

Unity-协同程序原理_第9张图片

使用IEnumerator中的MoveNext()方法。 

Unity-协同程序原理_第10张图片

 发现竟然打印了。Unity-协同程序原理_第11张图片

再调用它的Current属性,发现打印的是yield return的返回值。

Unity-协同程序原理_第12张图片Unity-协同程序原理_第13张图片

 多次执行上述方法和属性。

Unity-协同程序原理_第14张图片

 运行结果如下。Unity-协同程序原理_第15张图片

 甚至我们可以调用Current返回的值。

Unity-协同程序原理_第16张图片

 Unity-协同程序原理_第17张图片

 打印出来的为10。

 协程的本质:协程函数本体(迭代器)+ 协程调度器Unity-协同程序原理_第18张图片

 另一个问题来了,我们可以用MoveNext()和Current来一步步执行协程函数。但是协程函数中有n个yield return 怎么办?写n个MoveNext()和Curren吗?

注意:MoveNext()返回bool值,当协程函数内还有可以执行的内容时返回true,没有返回flase。

Unity-协同程序原理_第19张图片

 通过一个while循环就可以执行所有内容。

Unity-协同程序原理_第20张图片

 运行结果如下:Unity-协同程序原理_第21张图片

 2、协程调度器

Unity-协同程序原理_第22张图片

 Unity-协同程序原理_第23张图片

 

 

你可能感兴趣的:(Unity,unity,游戏引擎)