著者:ゴキブリいじめっ子
リンク:https://www.zhihu.com/question/391094769/answer/3101596697
出典:Zhihu
著作権は著者に属します。商業的転載の場合は著者に連絡して承認を求め、非商業的転載の場合は出典を明記してください。
Unity は、ゲーム開発プロセスを簡素化するための便利なツールや機能を多数提供する強力なゲーム開発エンジンです。非常に重要な関数の 1 つはCoroutineです。コルーチンは、マルチスレッド関数やコールバック関数を使用せずにプログラムに非同期操作を実装できるようにする特別な関数です。この記事では、Unity のコルーチンとは何なのかについて詳しく説明します。
- コルーチンとは何ですか?
コルーチンは、実行中に実行を一時停止したり再開したりできる特別な種類の関数です。コルーチンはスレッドに似ていますが、スレッドとは異なり、オペレーティング システムではなくプログラム自体によってスケジュールされます。これは、メインスレッドをブロックすることなく、コルーチンで時間のかかる操作を実行できることを意味します。
- コルーチンの使い方
Unity では、C# 言語を使用してコルーチンを作成できます。コルーチンを作成するには、キーワード yield を使用し、関数の前にキーワード IEnumerator を追加する必要があります。例えば:
IEnumerator MyCoroutine()
{
// 协程的执行内容
yield return null;
// 继续执行协程的内容
}
コルーチンでは、yield キーワードを使用してコルーチンの実行を一時停止し、必要に応じて実行を再開できます。yield キーワードの後には、いくつかの特別な命令を続けることができます。たとえば、yield return null は1 フレームの一時停止を意味し、yield return new WaitForSeconds(1) は 1 秒の一時停止を意味します。
- コルーチンの使用
コルーチンはゲーム開発で多くの用途があります。一般的なアプリケーション シナリオをいくつか示します。
a.遅延操作: コルーチンを使用して、一部の遅延実行操作を実装できます。たとえば、コルーチンを使用して、数秒の遅延後にアニメーションを再生する効果を実現できます。
b. アニメーション制御: コルーチンを使用してオブジェクトのアニメーションを制御できます。たとえば、コルーチンを使用してスムーズな動きの効果を実現し、フレームごとにわずかな距離を移動してアニメーション効果を実現できます。
c.非同期ロード: コルーチンを使用してリソースを非同期にロードできます。たとえば、コルーチンを使用すると、メイン スレッドをブロックすることなく、大きなテクスチャ ファイルやオーディオ ファイルを読み込むことができます。
d. ゲーム フロー制御: コルーチンを使用してゲーム フローを制御できます。たとえば、コルーチンを使用してカウントダウン効果を実現したり、ゲーム内の一連のタスクを実行したりできます。
- コルーチンに関する注意事項
コルーチンを使用する場合は、次の点に注意してください。
a. コルーチンは MonoBehaviour の派生クラスでのみ使用できます。これは、コルーチンが Unity のメッセージ ループを通じてスケジュールされる必要があるためです。
b. コルーチンは、 out パラメーターまたはref パラメーターを持つメソッドを使用できません。これは、コルーチンの実行が一時停止および再開される可能性があり、一時停止および再開のプロセス中にこれらのパラメーターが変更される可能性があるためです。
c. コルーチンの実行順序は未定義です。コルーチンはプログラム自体によってスケジュールされるため、コルーチンの実行順序と実行回数は保証できません。
d. コルーチンは、StopCoroutine() を通じて実行を停止できます。コルーチンを手動で停止しない場合、ゲーム オブジェクトが破棄されるまで実行され続けます。