【Unity】UniRxを覚える(3)
前回の記事。
コルーチン
UnityのコルーチンをIObservableに変換
Observable.FromCoroutine
コルーチンの終了タイミングをストリームで扱うことが可能
void Start() { Observable.FromCoroutine(TestCoroutine) .Subscribe( e => { Debug.Log("next"); }, () => { Debug.Log("complete"); } ).AddTo(gameObject); } IEnumerator TestCoroutine() { Debug.Log("start"); yield return new WaitForSeconds(4); Debug.Log("finish"); }
start->finish->next->Complete
コルーチンから結果を返す
Observable.FromCoroutineValue
void Start() { Observable.FromCoroutineValue<int>(ReturnValueCoroutine) .Subscribe(e => Debug.Log(e)); } IEnumerator ReturnValueCoroutine() { for(var idx = 0; idx < 10; ++idx) { yield return idx; } }
0から9まで出力
コルーチン内でOnNextを発行
void Start() { Observable.FromCoroutine<int>(observer => CallOnNextCoroutine(observer)) .Subscribe( e => { Debug.Log(e); } ).AddTo(gameObject); } IEnumerator CallOnNextCoroutine(IObserver<int> observer) { observer.OnNext(1); yield break; }
まとめ
3記事に分けて学習していきました。
おそらく入門程度の知識を身についたと思います。
ほぼすべての処理を初期化で行うのでどのくらいの負荷がかかるのかとか、
チームで導入するには学習コストが高いなどの気になるところはあります。
ただその分、今まで何十行もかけて書いてた処理を数行でかけるようになったりと、
可読性もあがります。
私個人としてはとても便利だと思うので、
ここから更に理解を深めて積極的に使っていきたいです。
参考にさせていただいたサイト様