質問: Unity(JavaScript)で2Dゲームを作っています。 ゲーム中いろいろなシーンでグラフィックをフェードイン、フェードアウトする処理を行うのですが、 これを各シーンでメソッドを書くより、static classにすると良いだろうと考え以下のコードを書きました。 static class FIO{ function Img (img:UI.Image,IN:boolean,sec:float) { //引数は(対象グラフィック , フェードイン/フェードアウト , 処理秒数) Debug.Log("FIO/Img"); var t:float; var u:float; while(t<1){ t+=Time.deltaTime/sec; u=t; if(!IN)u=1-t; img.color.a=u; yield; } } } これをそれぞれ適切なタイミングで呼び出すようにしたのですが、 なぜか実行されません。 メソッド冒頭のDebug.Logすら実行されません。 呼び出し元のスクリプトは Debug.Log("FadeOut"); FIO.Img(targetImg,false,0.2); のように記述しており、こちらのDebug.Logは実行されます。 処理が実行されないだけで、 コンパイルエラーも実行時例外も発生しないので、理由がわかりません。 ご教示いただけるとありがたいです。 よろしくお願いします。
回答: `Img()`内で*yield*キーワードを使われているので、コルーチンとして関数を呼ぶ必要があるのではないでしょうか。 下記の例では`StartCoroutine()`を使って関数を実行しています。 ``` var img:UI.Image; function Start () { StartCoroutine( FIO.Img( img,false,1.0 ) ); } ```