【UnityC#】コルーチン内で入力待ちする
コルーチンの中で入力待ちをしたいと思ったので調べました。
(1)WaitUntil
条件が一致するときに待機を抜ける便利なやつです。
docs.unity3d.com
例えば、下記のように扱います。
IEnumerator WaitUntilTest () { yield return new WaitUntil(() => { return true; }); }
スペースキー入力を待機するなら、
IEnumerator WaitInput () { yield return new WaitUntil(() => Input.GetKeyDown(KeyCode.Space)); }
引数にはboolを入れるのではなく、デリゲートを入れるので注意が必要です。
WaitWhileは、強制で1フレーム消費されるので、これも注意が必要です。
(2)WaitWhile
WaitWhileはWaitUntilと同じで入力待ち等に使えるものです。
WaitUntilと違い、「デリゲートがtrueと判断されるまで中断」なので、1フレーム消費しません。
IEnumerator WaitWhileTest () { yield return new WaitWhile(() => { return true; }); }
(3)while文で入力待ち
IEnumerator WaitTest () { while(!Input.GetKeyDown(KeyCode.Space)) { yield return null; } }
何か毎フレームごとに処理を挟みたい等でないならWaitUntilを使ったほうがすっきりするかもしれません。