##コルーチンでクリック待ちできない?
Unity独習2週間くらい。
クリックorキー入力を待ってnGUIのテキストを変更したかったが、Updateメソッドで条件分けするのが面倒くさかった。
調べてみるとコルーチン(Coroutine)が使えそうとのことだったので試してみたがハマってしまった。
void Hoge(){ //コルーチンを呼び出す側メソッド
foo(); //任意の処理
StartCoroutine("Fuga") //コルーチン呼び出し
bar(); //任意の処理
}
IEnumerator Fuga(){ //コルーチン
//マウス左クリックを待つ処理
yield return new WaitUntil(() =>
Input.GetMouseButtonDown(0))
}
上記コードを実行すると、foo()を実行後にコルーチンFuga()が呼び出されクリック待ち状態に移行。クリックすることでbar()が実行されるはず……と思っていた。
が、結果は違っていた。foo()の直後にクリック待ち状態に移行することなくbar()が実行されてしまう。どうにかfoo()とbar()の間にクリック待ちを仕込みたかったが、ハマってしまったというわけ。
##解決
どうやらプログラムがforkする(詳しくはないので正しい言葉かは分からない)ようで、処理と処理の間にクリック待ちを挟みたい場合は、すべてをコルーチンの中に記述するほかないらしい。
void Hoge(){ //コルーチンを呼び出す側メソッド
StartCoroutine("Fuga") //コルーチン呼び出し
}
IEnumerator Fuga(){ //コルーチン
foo(); //任意の処理
//マウス左クリックを待つ処理
yield return new WaitUntil(() =>
Input.GetMouseButtonDown(0))
bar(); //任意の処理
}
nGUIテキストをクリックするたびに変更する(たとえばADVのテキスト送りなど)場合、表示処理すべてをコルーチン内部に書くということなんかしら。
あんまりスマートな書き方ではない気がするね。ただ一応、ハマりからは脱出できたからよしとします。ヨシ!