我眼中的协同(unity IEnumerator )

来源:互联网 发布:excel 宏编程的语法 编辑:程序博客网 时间:2024/05/16 19:42

怎么理解协同?

在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。可以用来控制运动、序列以及对象的行为。

大家做程序员,应该都能明白什么是主线程序,按照上面的说法,可以知道协同并非线程。

一般什么地方能使用到协同?

想要实现一些延时等待,操作完成之后在执行后面的代码的时候都可以使用协同进行实现,比如说使用www加载资源,等到加载完成在把图片拿出来使用,比如打开某个界面后两秒钟播放一个特效。

如何使用

直接上例子:
void Main()

{

        StartCoroutine(WaitForOneSec());//调用协同必须使用StartCoroutine

}

IEnumerator WaitForOneSec()//返回值必须是IEnumerator

{

        yield return new WaitForSeconds(1);//必须有yield return来返回,目前这句的意思是等待一秒终止后执行后面一句话。

        Debug.LogError("wait over");

}

返回值类型

yield return null相当于挂起一帧,什么意思呢?如果一个协同里面有一句yield return null执行顺序为:1.调用协同函数-->2.直接进入协同函数内部执行代码---->3.执行到yield return null挂起 ----->4.执行Update-->5.执行LastUpdate--->6.执行下一帧的Update----->7.执行协同内部挂起部分代码的后续部分。

WaitForEndOfFrame等一帧

WaitForFixedUpdate等fixedupdate执行之后

WaitForSeconds等几秒

WWW等www加载结果回来

Another coroutine其他的协同

break 直接返回后面不执行

遇到的坑

做程序员大家都知道方法返回值可以接收进行使用,也可以不接收只执行方法体,但是,在协同中,这个返回值是一个迭代器,一般这个返回值不会进行使用,而是交给程序自己进行迭代查询。

必须使用StartCoroutine调用协同,不然不能正常执行。

如果有遇到其他坑的可以给我留言 ,我会整理加上哦。希望对大家有帮助。

1 0