【Unity】【UniRx】Observableをコルーチンに変換する

Observableをコルーチンに変換する方法のまとめです。

ToYieldInstruction

Observableをコルーチンに変換するにはToYieldInstruction()オペレータを使います。

これを使うと「ボタンAの押下を待つ > ボタンBの押下を待つ > コルーチンを終了する」
のような一連の処理がきれいに書けるようになります。

ソースコードを見てもらうのが早そうです。

ソースコード

というわけでソースコードです。

using System.Collections;
using UnityEngine;
using UniRx;
using UnityEngine.UI;

public class Example : MonoBehaviour 
{
    [SerializeField]
    private Button _buttonA;
    [SerializeField]
    private Button _buttonB;

    public void Start()
    {
        StartCoroutine(ExampleCoroutine());
    }

    private IEnumerator ExampleCoroutine()
    {
        Debug.Log("Aが押されるのを待ちます.");
        yield return _buttonA
            .OnClickAsObservable()
            .FirstOrDefault()
            .ToYieldInstruction();

        Debug.Log("Bが押されるのを待ちます.");
        yield return _buttonB
            .OnClickAsObservable()
            .FirstOrDefault()
            .ToYieldInstruction();
        
        Debug.Log("両方押されました.");
    }
}