(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!


UniRxのAddTo(gameObject)とAddTo(this)はほぼ同じ、OnDestroyが実行されなくてもAddToは有効【Unity】【UniRx】


このエントリーをはてなブックマークに追加



この記事でのバージョン
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が実行されずとも購読はちゃんと破棄されます。