【UniRx】AddToについて【使い方】
はじめに
AddTo() は、UniRxが提供している拡張メソッドです。
UniRxでは、購読の破棄を正しく行わないとメモリリークが発生します。
AddTo()を記述する事で、引数に渡したGameObjectがDestroyされる際に自動で購読破棄されるようになります。
使い方
AddTo()は、Subscribe時にメソッドチェーンで続けて記述します。
(厳密には、IDisposableインスタンス全てに生やすことが可能です)
自身の寿命に紐づける時
using UniRx; class Sample : MonoBehaviour { IntReactiveProperty score = new IntReactiveProperty(); void Awake() { score.Subscribe(x => 購読処理) .AddTo(this); // AddTo(gameObject)と同義 } }
もちろん、他者の寿命に紐づける事も可能です。
[SerializeField] GameObject other; void Awake { score.Subscribe(x => 購読処理) .AddTo(other); }
挙動
GameObjectを渡した場合は、GameObjectがDestroyされると自動的に購読破棄されます
Componentを渡した場合は、アタッチされているGameObjectがDestroyされると自動的に購読破棄されます
いずれも、GameObjectがDestroyされる時にのみ破棄される事に注意が必要です
まとめ
- 購読破棄忘れによるメモリリークを防ぐ
- Subscribe時にメソッドチェーンで記述する
- GameObjectを渡した場合は、GameObjectがDestroyされると自動的に購読破棄される
- Componentを渡した場合は、アタッチされているGameObjectがDestroyされると自動的に購読破棄される