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
}