什么是协程
在Unity中,一般的方法都是顺序执行的,一般的方法也都是在一帧中执行完毕的,当我们所写的方法需要耗费一定时间时,便会出现帧率下降,画面卡顿的现象,所以这种耗时的方法不要再主线程出现,最好放到协程里实现。 协程不是多线程 !!! 协程还是在主线程里面 ,这点十分重要,不要被网上其他资料误导。协程的真正用途是分步做一个比较耗时的事情,比如游戏里面的加载资源
关键词 yield
yield return null ;
yield return 0 ;
yield return 6 ;
yield break ;
yield return asyncOperation;
yield return StartCoroution ( ) ;
yield return WWW ( ) ;
yield return new WaitForEndOfFrame ( ) ;
yield return new WaitForSeconds ( 0.3 f) ;
yield return new WaitForSecondsRealtime ( 0.3 f) ;
yield return WaitForFixedUpdate ( ) ;
yield return new WaitUntil ( )
yield return new WaitWhile ( )
协程使用
比如我们加载的资源有30个(total),但是一次加载完毕会耗费大量的时间,不可能让玩家在start中等待这么久,这时候协程的作用就出现了,协程是每帧lateUpdate之前执行yield return之前的代码,lateupdate之后执行yield return之后的代码,相当于每帧循环一次(前提是你的协程有循环体,否则一帧就执行完了),这样就不会卡在这加载30个资源这里,而是你在update里面继续做你的事情,我每次只加载1个,加载1个耗时显然远远小于30个。
private int num = 0 ;
private const int total= 30 ;
void Start ( )
{
StartCoroutine ( coRoutine ( ) ) ;
}
IEnumerator coRoutine ( )
{
while ( num< total)
{
num++ ;
Debug. Log ( num) ;
yield return null ;
}
}
void Update ( ) {
Debug. Log ( "update!" ) ;
}
void LateUpdate ( )
{
Debug. Log ( "lateUpdate!" ) ;
}