Unity_协程

1.协同程序和线程的区别

首先需要弄明白协程和线程的区别 因为两个从字面意思上比较相像 但其实本质上是完全不同的

协程又称之为协同程序 它本质上是"假" 的多线程,不是多线程

它的主要作用是:将代码分时分步的执行,不卡主线程

新开一个线程是独立的一个管道,和主线程并行执行

新开一个协程是在原线程之上开启,进行逻辑分时分步执行

比如我们在代码中需要创建十万个Cube,这个操作必定是费时的,当在游戏中执行到这一步时,游戏必定会因为创建这个十万个Cube需要等待,带来的体验直接就是卡顿,所以通过协程可以解决这个问题,我们不需要让代码一次性生成十万个Cube,可以逐帧生成或者逐秒生成,在这一帧生成一批,下一帧再生成一批,虽然十万个Cube到最后是一定会生成的,只是采取两种不同的方式,带量的体验是截然不同的,这就是协程的好处之一

2.使用协程

继承MonoBehavior的类 都可以开启 协程函数

声明协程的两个关键点

一个是IEnumerator类型和子类

函数中通过 yield return 返回值; 进行返回

StartCoroutine() 开启协程

传入对象或协程函数的字符串都可以

StopAllCoroutines(); //关闭所有协程

StopCoroutine(c1);//关闭指定协程 通过返回的类对象来准确的关闭具体哪一步的协程

3.yield return 不同内容的含义

        //1.下一帧执行
        //yield return 数字;
        //yield return null;
        //在Update和LateUpdate之间执行

        //2.等待指定秒后执行
        //yield return new WaitForSeconds(秒);
        //在Update和LateUpdate之间执行

        //3.等待下一个固定物理帧更新时执行
        //yield return new WaitForFixedUpdate();
        //在FixedUpdate和碰撞检测相关函数之后执行

        //4.等待摄像机和GUI渲染完成后执行
        //yield return new WaitForEndOfFrame();
        //在LateUpdate之后的渲染相关处理完毕后之后

        //5.一些特殊类型的对象 比如异步加载相关函数返回的对象
        //之后讲解 异步加载资源 异步加载场景 网络加载时再讲解
        //一般在Update和LateUpdate之间执行

        //6.跳出协程
        //yield break;

        //协程开启后
        //组件和物体销毁,协程不执行
        //物体失活协程不执行,组件失活协程执行

猜你喜欢

转载自blog.csdn.net/m0_69778537/article/details/131874138