Unity3D中的协程机制-新闻详情

Unity3D中的协程机制


发布时间:2017-08-24责任编辑:朱明 浏览:1305


Unity中,一般的方法都是顺序执行的,一般的方法也都是在一帧中执行完毕的,当我们所写的方法需要耗费一定时间时,便会出现帧率下降,画面卡顿的现象。当我们调用一个方法想要让一个物体缓慢消失时,除了在Update方法中执行相关操作外,Unity还提供了更加便利的方法,这便是协程。

首先,请你牢记:协程不是线程,也不是异步执行的。协程和 MonoBehaviour  Update函数一样也是在MainThread中执行的。使用协程你不用考虑同步和锁的问题。协程在遇到某些条件会被挂起,直到满足特定条件后才会被唤醒,接着继续执行后面的代码。

Unity中,Unity会在每一帧去处理对象上的协程,也就是说在每个Update后会去检查协程的条件是否满足。总的来说就是一句话:协程可以控制代码在特定的时机执行。

那么问题来了,什么是满足条件?在Unity的协程机制中,满足条件即满足yield return new后面的代码,当然,所有使用yield的函数必须将返回值类型设置为IEnumerator类型。

下面用协程机制做一个简单的例子在控制台中输出多种“Helloworld”,来学习MonoBehaviour中协程的执行顺序。代码如下:

1.png

2.png

控制台的输出如下:

3.png

通过输出我们可以得出下面的结果:

yield WaitForSeconds (3);是在指定三秒后执行的。

Yield WaitForFixedUpdate();表示携程是跟在FixedUpdate()之后执行的。

Yield WaitForEndOfFrame();表示协程是在LateUpdate()之后执行的。

最后补一张Monobehaviour的运行顺序图:

4.png


春秋工作室   供稿