1

ユニティ 5.4.3f1。

Unity を対象とする UniRx を使用したリアクティブ プログラミングを学習しています。入力軸から単純なデータ ストリームを作成しようとしている瞬間です。

   public IObservable<float> Movement;

void Start () 
{
    this.Movement = Observable.EveryUpdate()
                    .Select(_ => Input.GetAxis("Horizontal") )
                    .Subscribe(f => Debug.Log(f))
                    .AddTo(this);
}

次のエラーが表示されます。

Error CS0266: Cannot implicitly convert type `System.IDisposable' to `UniRx.IObservable<float>'. An explicit conversion exists (are you missing a cast?) (CS0266) (Assembly-CSharp)

UniRx の例は正常にコンパイルされます。

    Observable.IntervalFrame(30).Subscribe(x => Debug.Log(x)).AddTo(this);

両者の間に大きな違いは見られません。私は何が欠けていますか?

4

1 に答える 1

2

まあ私は愚かです。オブザーバブルとサブスクリプションの作成は、2 つの異なるものである必要があります。それらが分離されている場合、コードは正常にコンパイルされます。

public IObservable<float> Movement;

void Start () 
{
    this.Movement = Observable.EveryUpdate()
        .Select(_ => Input.GetAxis("Horizontal") )
        .Where( f => f > 0.01f || f < -0.01f);

    this.Movement.Subscribe(f => Debug.Log(f))
        .AddTo(this);
}
于 2016-11-21T10:03:33.527 に答える