Unityでコルーチンを使って処理の流れを制御する時の待機方法を調べてみました。
通常はWaitForSecondsを使っている感じなのですが、その他色々な方法があります。
コルーチンの制御
コルーチンについてのドキュメントはこちらです。コルーチン – Unity
秒数待つ
指定された秒数を待機する時にWaitForSecondsを使います。
1 2 3 4 |
private IEnumerator StartAction() { yield return new WaitForSeconds(1.0f); } |
時にはタイムスケールを制御している場合があるときにはWaitForSecondsRealtimeを使います。
タイムスケールに影響されずに待機することができます。
1 2 3 4 |
private IEnumerator StartAction() { yield return new WaitForSecondsRealtime(1.0f); } |
WaitUntil
指定した条件を満たすまで待機するのがWaitUntil()です。
1 2 3 4 |
private IEnumerator StartAction() { yield return new WaitUntil(()=>_count > 10); } |
WaitWhile
指定した条件から外れたときまで待機するのがWaitWhile()です。
1 2 3 4 |
private IEnumerator StartAction() { yield return new WaitUntil(()=> gameObject == null); } |
自作する
CustomYieldInstructionを継承すれば自作の待機処理を作成することができます。必要なプロパティはkeepWaitingです。
こちらの条件を見てコルーチンを待機させることができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class CustomHoge : CustomYieldInstruction { public bool IsComplete { get; private set; } public override bool keepWaiting { get { return IsComplete == false; } } } private IEnumerator StartAction() { yield return new CustomHoge(); } |
最後に
コルーチンは今後、「async await」に置き換わっていくと思うのですが、コルーチンはまだまだ健在です。今回調べて、色々な使い方が見えてきましたので、実際に使える場面で使っていきたい。
