UniRxのTakeXxx系のオペレータをまとめました。
Take
Take()は引数に与えた回数だけストリームを流します。
終了した時点でOnCompleteが呼ばれます。
// Takeの回数だけOnNext()を呼んで、回数分終わったらOnComplete Observable .Interval(System.TimeSpan.FromSeconds(1.0f)) .Take(3) .Subscribe(i => Debug.Log(i), () => Debug.Log("OnComplete."));
TakeUntil
TakeUntil()は引数に与えたObservableのOnNext()が流れるまでストリームを流します。
引数に与えたObservableのOnNext()が流れた時点でOnCompleteが呼ばれます。
またその時点で引数のObservableはDisposeされます。
// TakeUntilの引数のObservableのOnNext()が流れたら終了するObservable // その時引数のObservableはDisposeされる Observable .Interval(System.TimeSpan.FromSeconds(1.0f)) .TakeUntil ( // 何かしらのインプットを通知するObservable Observable .EveryUpdate() .Where(_ => Input.anyKeyDown) .DoOnSubscribe(() => Debug.Log("Input Observable : On Subscribe")) .DoOnTerminate(() => Debug.Log("Input Observable : On Terminate")) .DoOnCancel(() => Debug.Log("Input Observable : On Cancel.")) ) .Subscribe(i => Debug.Log(i), () => Debug.Log("OnComplete."));
TakeLast
最後のN個だけストリームを流します。
// 最後のN個だけ流す // 出力は7, 8, 9 Observable.Range(0, 10) .TakeLast(3) .Subscribe(i => Debug.Log(i), () => Debug.Log("OnComplete."));
TakeWhile
引数の条件式がtrueの間だけストリームを流します。
// 条件式に合っている間だけ流す // 判定時、条件に合っていなかったらOnNextは流さずOnCompleteのみ行う Observable.Interval(System.TimeSpan.FromSeconds(1.0f)) .TakeWhile(i => i < 10.0f) .Subscribe(i => Debug.Log(i), () => Debug.Log("OnComplete."));
TakeUntilDestroy
指定したGameObjectやコンポーネントが破棄されるまでストリームを流します。
Observable.Interval(System.TimeSpan.FromSeconds(1.0f)) .TakeUntilDestroy(gameObject) .Subscribe(i => Debug.Log(i), () => Debug.Log("OnComplete."));
TakeUntilDisable
指定したGameObjectやコンポーネントが非アクティブになるまでストリームを流します。
// 条件式に合っている間だけ流す // 判定時、条件に合っていなかったらOnNextは流さずOnCompleteのみ行う Observable.Interval(System.TimeSpan.FromSeconds(1.0f)) .TakeUntilDisable(gameObject) .Subscribe(i => Debug.Log(i), () => Debug.Log("OnComplete."));