UniRxを使って別のGameObjectにスクリプトを新しく作らずにOnCollisionEnterをさせる【Unity】

Oct. 8, 2019, 2:12 a.m. edited Oct. 19, 2019, 11:12 p.m.

#Unity 

例えばUnityで大砲から弾を発射するとき、弾と敵キャラの衝突をとりたくなります。その場合はOnCollisionEnterを使いますが、そのためには弾にもOnCollisionEnterを記述したスクリプトを作らなければなりません1。すると、大砲だけでなく弾のスクリプトも管理することになり、面倒です。

そこで、UniRxを使います。UniRxにはUniRx.Triggersがあり、これをusingすると以下のように、

using UniRx;
using UniRx.Triggers;

...

// 例えば大砲の弾がballという変数名のとき
ball.gameObject.OnCollisionEnterAsObservable().Subscribe(collision => {
    // 弾の衝突時の処理
});

と対象のオブジェクトのOnCollisionEnterをフックしてくることができます2OnCollisionEnter以外にも様々なイベントをフックしてくることができるので、とても便利です。


  1. 個人的に敵キャラのスクリプトには書きたくない(弾の種類だけでなく衝突するものなんてたくさんあるので、そこに羅列したくない) 

  2. 対象のオブジェクトがDestroyされるときに自動でOnCompletedが発行されるのでAddTo等も特に必要ない