びぼうろくってみんなやってる

みんなやってるからぼくもやる

UniRxでUI等を監視する

//監視されるがわ
public class ObservableTest : MonoBehaviour
{  
    [SerializeField] Button button;
    public IObservable<Unit> OnClick { get { return button.OnClickAsObservable(); } }

  [SerializeField] Button returnTextButton;
  public IObservable<string> OnClickText 
  { 
    get
    { 
      return returnTextButton
      .OnClickAsObservable()
      .Select(_ => return "SelectでStringをとったり"); 
    }
  }
  
    [SerializeField] Slider slider;
    public IObservable<float> OnSlide { get { return slider.OnValueChangedAsObservable(); } }

    [SerializeField] Toggle toggle;
    public IObservable<bool> OnToggle { get { return toggle.OnValueChangedAsObservable(); } }

    public IObservable<Unit> OnStart { get { return onStart; } }
    Subject<Unit> onStart = new Subject<Unit>();

    void Start()
    {
        onStart.OnNext(Unit.Default);
    }
}

//監視する側
public class ObserverTest
{
    public void Init(ObservableTest observable)
    {
        //一行なら{}を書かなくても良い
        observable.OnClick.Subscribe(_ => Debug.Log("OnClick"));
        observable.OnSlide.Subscribe(f => Debug.Log("OnSlide:" + f.ToString()));
        observable.OnToggle.Subscribe(b => Debug.Log("OnToggle:" + b.ToString()));
        observable.OnStart.Subscribe(_ => Debug.Log("Start"));
    }
}