おもしろいもの、やくにたつもの を かきこむのだ!

Unityでコールバックを使わずに他のオブジェクトの処理の完了を受け取る

UnityでAというオブジェクトが、別のBというオブジェクトのアニメーションや処理が終わったことを知りたい場合は、

  • C#Delegateを使う
  • AとBが相互に参照しあうようにして、BがAに完了を伝える

という手段が挙げられる。 コールバックという方法ですね(たしか)

どちらも間違いではないが、

  • Delegateを書くのがめんどくさい
  • AとBを相互に参照させたくない(循環参照は避けたい)

ということがあるかと思う。

コルーチンを使って別のオブジェクトの状態を監視する

コルーチンを使えば、シンプルに書くことができる

while文で毎フレーム対象のオブジェクトを監視して、状態が変わったらwhile文を抜けてその次の処理を実行するという仕組み。

シンプルに実装できるので、アニメーションを組み合わせた演出などを作る時に便利。
ただし、Delegateなどに比べると、完了次第すぐに通知できるわけではないので、要注意。
(スクリプトの実行順序によっては、1フレーム待つケースがある)