UniRx UniTaskを利用してIObservableで通知が来るまでawaitする
UniRxで作成したIObservableを UniTaskを利用してとある演出シーケンスなどの一連の流れの中で使いたい。
async UniTask 何かしらの演出() { // 演出A // UniRxから通知が来るまで待機したい // 演出B }
UniTaskはIObservableをawaitできますが、待機終了する条件は 『OnComplete が呼ばれたとき。』
元々『UniTaskにSetNextが呼ばれるまでawaitする機能があれば出来そう。』と思っていましたが、「OnCompleteが呼ばれるまで」という条件でした
であればOnCompleteが呼ばれるようにすればいいわけで
このときFirstオペレーターを利用できました
async UniTask 何かしらの演出() { // 演出A // hoge先で OnNext() が呼ばれるまで await する await hoge.FugaObservable.First(); // 演出B }
Firstははじめの一度だけ通知を呼び出し、その後OnCompleteします。 つまり OnNext が呼ばれたあと First を通ることで await が終了するということ
でした。終わり
もしとある条件の通知が来た時のみ先に進ませたいのであればWhereを併用できます
async UniTask 何かしらの演出() { // 演出A // hoge先で OnNext() が呼ばれるまで await する await hoge.FugaObservable .Where(x => x.IsOk) // IsOK がtrueの時のみ進む .First(); // 演出B }