Unity_コルーチン

1. コルーチンとスレッドの違い

まず最初に、コルーチンとスレッドの違いを理解する必要があります。この 2 つは文字通りの意味では似ていますが、実際には本質的にはまったく異なるものであるためです。

コルーチンはコルーチンとも呼ばれ、本質的にはマルチスレッドではなく「偽の」マルチスレッドです。

その主な機能は、メインスレッドでスタックすることなく、コードを時間内に段階的に実行することです。

新しいスレッドのオープンは独立したパイプラインであり、メインスレッドと並行して実行されます。

新しいコルーチンを開くと、元のスレッドの上で開始され、ロジックが時分割で段階的に実行されます。

たとえば、コードで 100,000 個のキューブを作成する必要があります。この操作には時間がかかるはずです。このステップがゲーム内で実行されると、ゲームは確実に 100,000 個のキューブの作成と、それがもたらすエクスペリエンスを待つ必要があります。は直接スタックしているため、この問題はコルーチンによって解決できます。コードで一度に 100,000 個の Cube を生成する必要はありません。フレームごとまたは秒ごとに生成できます。このフレームで 1 つのバッチが生成されます。 100,000 個のキューブが最終的に生成されることは間違いありませんが、2 つの異なる方法が採用されており、ボリュームのエクスペリエンスがまったく異なります。これがコルーチンの利点の 1 つです。

2. コルーチンを使用する

MonoBehavior を継承するクラスでコルーチン関数を有効にできる

コルーチンを宣言するための 2 つの重要なポイント

1 つは IEnumerator 型とサブクラスです。

関数内での yield return による戻り値; return

StartCoroutine() 开启协程

オブジェクトまたはコルーチン関数に渡される文字列は問題ありません

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

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

3. 利回りの意味は異なる内容を返します

        //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