Roba Memo - 素人のUnity覚書と奮闘記

素人のUnity覚書と奮闘記

yield retuen null って何さー?

Updateで処理すりゃええやん〜♪って思ってたんですが、記述が多くなると読み辛くなる → バグ増える。
ということで、イキって(?) コルーチン使ってみた。

基本の形

StartCoroutine (Routine ());

IEnumerator Routine ()
{

    //TODO:処理

    yield return null;

}

yield returnの後に、何をつなげるかで挙動が変わってくるみたい。

Updateみたいに毎フレーム実行する

ループ処理のwhileとの合わせ技でUpdateっぽくする。

IEnumerator Routine ()
{
    while (true) {   
        //TODO:処理

        yield return null;
    }
}

yield retuen null って何さー?

ネットを探ってみると、一旦処理を中断して次のフレームで再開するという感じかな。
う〜ん、いまいちピンとこない。

たとえば、この2つのコードは、どう違うのだろうか?

IEnumerator Routine ()
{
    while (true) {   
        //TODO:処理

        yield return null;
    }
}
void Function(){
    while (true) {   
        //TODO:処理

    }
}

2つ目(Function)のコードでも繰り返し処理をしてくれるよね。
単純に繰り返し処理をしたいだけなら、それでいいと思う。
コルーチンを使うのは、何かと同期を図るためじゃないだろうか。
yield return nullなら、フレームと同期を図ってるんじゃないかな。
つまり、yield return ナンチャラ =ナンチャラとタイミング合わせるからちょっと中断するねって感じじゃなかろうか?

例えば、上記の関数でwhileの条件がtureじゃなくて3回繰り返すとした場合。
緑色の四角いのが、1回に行う処理。
f:id:nico-taniku:20170913084734p:plain
こんな感じで、Routine ()はフレームが更新されるタイミングで実行するのに対し、Function()はフレームとか御構い無しに連続して処理しちゃう。

とりあえず、以上。