【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を使ったほうがすっきりするかもしれません。