UniRx: ToObservable() が From() に代わりになるのかな
Rx には From というオペレータがあります。
UniRx には From が定義されてないようですが、ToObservable() というのがあります。
このメソッドを使うと、IEnumerable<T>
を IObservable<T>
に変換できます。
using UniRx; using UniRx.Diagnostics; using UnityEngine; public class Main : MonoBehaviour { void Start() { var s = new[] {10, 20, 30}.ToObservable(); s.Debug().Subscribe(); } }
実行結果です。
[20:20:37:877] OnSubscribe [20:20:37:882] OnNext(10) [20:20:37:884] OnNext(20) [20:20:37:885] OnNext(30) [20:20:37:886] OnCompleted()
ToObservable()
は、コルーチンを Observable 化することもできます。
publishEveryYield が false の場合
void Start() { var s = G().ToObservable(publishEveryYield: false); s.Debug().Subscribe(); } IEnumerator G() { for (int i = 0; i < 3; i++) yield return null; }
実行結果です。
[20:30:57:423] OnSubscribe [20:30:57:822] OnNext(()) [20:30:57:824] OnCompleted()
publishEveryYield が true の場合
void Start() { var s = G().ToObservable(publishEveryYield: true); s.Debug().Subscribe(); } IEnumerator G() { for (int i = 0; i < 3; i++) yield return null; }
実行結果です。
[20:31:55:981] OnSubscribe [20:31:55:995] OnNext(()) [20:31:56:024] OnNext(()) [20:31:56:375] OnNext(()) [20:31:56:396] OnNext(()) [20:31:56:397] OnCompleted()
publishEveryYield が true の場合は、yield return が実行されるたびに OnNext されるようになります。
ログに出力されている 4 つの OnNext のうち、最初の 3 つの OnNext は yield return の実行分で、 最後のは、コルーチンが正常終了したときに通知される OnNext です。
コルーチンが yield return しなくても OnNext は呼ばれる
void Start() { var s = H().ToObservable(publishEveryYield: false); s.Debug().Subscribe(); } IEnumerator H() { yield break; }
実行結果です。
[20:43:58:160] OnSubscribe [20:43:58:172] OnNext(()) [20:43:58:174] OnCompleted()
コルーチンを Observable 化するとき、コルーチンが yield return せず、単に yield break するだけでも OnNext は呼ばれます。