トーフメモ

主にゲーム制作

【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

docs.unity3d.com

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

参考にしました

qiita.com
qiita.com