UnityのCoroutine(コルーチン)でハマった2つのこと

こんにちは。ヤマヤタケシです。

とか、アホなツイートしながらUnityを相変わらずいじっています。
2点ほどハマったので、これ俺だけ???なのか確認のためにも記事にします。

1. コルーチンで、while( true ){} でUnityのエディタが応答しなくなる
これ、うっかりやってしまってUnityをタスクマネージャから殺すハメになりました。
30分ほどいじっていたシーンが30分前の状況に戻ってしまい泣けました。
前回の保存した状態に手戻りです。

と、ここまで書いてもしかすると、コルーチン以外でも応答なしになるのか試しました。

function Start()
{
    while( true ){}
}

あ、固まった・・・。
コルーチン関係無いです。
どなたか、タスクマネージャで殺す以外の復帰方法があれば教えていただけないでしょうか?

2. Update から呼ぶのと呼び出しタイミングが違うので挙動が変わったよ
Updateから呼び出して正常に動作していたコードが、コルーチンから呼ぶとおかしくなりました。
呼び出しタイミングが変わったようです。
面倒ですが、フラグを追加して、次のフレームのUpdateで実行するように変更して、回避しました。
オフィシャルイベント関数の実行順にも、Updateが全部終わってからと書いてありますね。

まとめ
呼び出しタイミングもシステム側で決まっているのでLuaと比べるとちょっとクセがありますね。
とはいえ、ステートマシンとして実装しようとすると枠組みのコードが増えていくばかりなのでコルーチンは助かります。

残念、これにはコルーチンについては載ってないですね。人はいつ強力なコルーチンの存在を知るのだろう・・・。

そんじゃまた。

軽い気持ちで有名になりたいのでクリックをお願いします!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です