ドキュメント

Unity Engine

Unity Engine

Yield 命令リファレンス

コルーチンメソッドで異なるカスタム命令を実行して、再開するタイミングをコントロールします。
読み終わるまでの所要時間 7 分最終更新 3日前

コルーチンは、
yield return
ステートメントで実行をサスペンドします。
yield return null
は、次のフレームまでコルーチンの実行を一時停止します。ただし、
yield return
は Unity エディターやランタイムに、例えば指定された時間だけ待機したり、条件が満たされるまでコルーチンの実行を再開するように指示を返すこともできます。

ランタイム yield 命令

Unity には、
UnityEngine.YieldInstruction
から派生したカスタムの yield 命令のセットがあり、指定した時間が経過した後、指定した条件が満たされたとき、またはプレイヤーループの特定の時点で再開するために使用できます。

指示

説明

AsyncOperation
コルーチンを中断し、シーンやアセットの読み込みなどの非同期操作が完了したときに再開します。
WaitForEndOfFrame
コルーチンを中断し、すべてのレンダリングと GUI イベントの後のフレームの終了時に再開します。

注: エディターがバッチモードのとき、スクリプトに
[ExecuteInEditMode]
や
[ExecuteAlways]
マークがあっても、
WaitForEndOfFrame
は編集モードで実行されません。
WaitForFixedUpdate
コルーチンを中断し、 すべての物理演算後の次の物理演算更新の終了時に再開します 。
WaitForSeconds
コルーチンを中断し、タイムスケールをアカウントして指定された秒数が経過した後に再開します。
WaitForSecondsRealtime
コルーチンを中断し、指定された秒数が経過した後にタイムスケールを無視して再開します。
WaitUntil
コルーチンを中断し、指定されたデリゲートが
true
を評価すると再開します。
WaitWhile
コルーチンを中断し、指定されたデリゲートが
false
を評価すると再開します。
これらの yield 命令の詳細と使用例については、API リファレンスのページを参照してください。
プレイヤーループで異なるコルーチンが再開される場所を視覚的に示すには、イベント機能実行順の図を参照してください。

UnityTest yield 命令

[UnityTest]
属性でマークされた Unity Test Framework テストは、コルーチンとして実行されます。Test Framework パッケージは、Unity エディターをテストからコントロールするための追加の yield 命令のサポートを追加し、カスタム yield 命令を定義する機能を提供します。

指示

説明

EnterPlayMode
Unity エディターが再生モードに入るための yield 命令を作成します。
ExitPlayMode
Unity エディターが再生モードを終了するための yield 命令を作成します。
RecompileScripts
Unity エディターでスクリプトの再コンパイルをトリガーします。
WaitForDomainReload
受信ドメインのリロード後までスクリプトの実行を遅らせます。
Unity Test Framework が提供する収率命令の詳細は、エディタの収率命令 を参照してください。

エディターの yield 命令

Editor Coroutines パッケージは、Unity エディターの編集モードで実行されるコルーチンのサポートを追加します。パッケージには、編集モードコルーチンの追加の yield 命令が含まれています。

指示

説明

EditorWaitForSeconds
アカウントのタイムスケールを考慮して、指定された秒数が経過した後に EditorCoroutine を再開します。
詳細については、Editor Coroutines を参照してください。

バッチモードのサポート

スタンドアロン プレイヤーをバッチ モードで実行する場合、ランタイム コルーチン yield 命令はすべて法線として実行されます。
バッチモードでエディタを実行し、プロジェクトに
[ExecuteInEditMode]
また
は
[ExecuteAlways]
マークが付けられ、編集モードでも実行されるスクリプトがある場合、
WaitForEndOfFrame
を除くそれらのスクリプトのすべてのランタイムコルーチンは編集モードで実行されます。これは、すべての Unity サブシステムが編集モードでランタイムほど頻繁に更新されないためです。詳細については、
[ExecuteAlways]
API リファレンス を参照してください。

追加リソース