この記事でのバージョン
Unity 6000.3.4f1
UniRx 7.1.0
はじめに
UniRxを使って何かしらのイベントを購読した際、
AddToを使えば「オブジェクトが消さたら購読も自動解除」という事が出来るのでとても便利です。
//ボタンば押された時を購読、gameObjectが消されたら購読を破棄
_button.OnPointerDownAsObservable().Subscribe(OnPointerDown).AddTo(gameObject)
このAddToについて、ちょっと勘違いしていた事があったので今回はその紹介です!
AddTo(gameObject)とAddTo(this)はほぼ同じ
AddToはgameObject以外にもComponentを渡す事もでき、
MonoBehaviourを継承している一般的なクラスでは以下のようにも書けます。
.AddTo(this)
これをてっきりComponentが削除された時に購読も破棄されるものと思っていたのですが、
内部的にはgameObjectを渡した時とほぼ同じ処理なので、
Componentだけ削除しても購読は解除されません。
OnDestroyが実行されなくてもAddToは有効
AddToをすると対象のオブジェクトにObservableDestroyTriggerを付けて、監視するという流れです。
![]() |
この監視とはOnDestroyだけを見ているものだと思っていたので、
OnDestroyが実行されない(一度もactiveにならず消えた)と購読も破棄されないと思っていたのですが、
↓の通り、その部分のケアも入ってるためOnDestroyが実行されずとも購読はちゃんと破棄されます。
