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;
// コルーチンの開始後
// コンポーネントとオブジェクトは破棄され、コルーチンは実行されません
// オブジェクト非アクティブ化コルーチンは実行されず、コンポーネント非アクティブ化コルーチンが実行されます