コルーチンとは?
通常は、関数が始まるとreturnされるまでを1セットとして処理される訳ですが、 コルーチンは、処理の途中で一旦中断して、次のフレームでその続きから再開できたりする事ができます。
たとえば、「フェードアウトさせたい!」と思って以下のコードを書いたとします。
void Fade() { for (float f = 1f; f >= 0; f -= 0.1f) { Color c = renderer.material.color; c.a = f; renderer.material.color = c; } }
しかし、実際はこれだと突然消えるわけです。forの中でずっと透明度を変化させてますから、 forを抜けたときには見えなくなってます。
コルーチン使って処理中断
じゃあ、その時に役に立つのがコルーチン。戻り値に IEnumerator を指定して使います。
で、 yield return を内包させます。このyield returnのところで処理をUnityに返すわけです。 すると、透明度がちょっと変化した状態で描画され、そして、また次のフレームからforの処理が再開されるわけです。
IEnumerator Fade() { for (float f = 1f; f >= 0; f -= 0.1f) { Color c = image.color; alpha = f; c.a = alpha; image.color = c; yield return new WaitForSeconds(.1f); } }
あと、コルーチンを呼ぶときは↓の様に呼ぶ。
StartCoroutine("Fade");
これで徐々に変化していって消えていく処理ができます。
コルーチン便利。
http通信での利用例
前の投稿では、コルーチンをwwwの通信待機に使っています。
public IEnumerator Start(){ // ダウンロード処理 var www = WWW.LoadFromCacheOrDownload(url, 1); while (!www.isDone) { yield return null; } }
参考
こんな感じで、通信が完了するまで待って待ってる間は、表示をいろいろしておく感じでつかえますかね。