profile image

L o a d i n g . . .

반응형

첫 필터 메소드

  • IObservableIEnumerable와 쌍이 되어 있으니까, LINQ의 Where을 사용할 수 있다.
    ⇒ 이벤트에 대해 다루고 있는데 웬 LINQ?
  • IObservable<T>/IObserver<T>인터페이스의 수행 자체가 IEnumerable<T>/IEnumerator<T>인터페이스를 반전시켜 만들어진 것이기 때문이다.
    ⇒ ?!
  • LINQ를 통해, 실제로 푸시되는 값에 관해서 여러가지 할 수 있다는 이야기이다.
  • '반전'과 관련해서는 나중에 확실히 이해할 수 있다. 우선 신경 쓰지 말고 넘어가자!

 

준비

using UnityEngine;
public class Base : MonoBehaviour {
    public void Move (float dx,float dy) {
        gameObject.transform.position += new Vector3(dx, dy, 0);     
    } 
}

 

Where

using UnityEngine;
using System.Collections;
using UniRx;
using UniRx.Triggers;

public class Where : Base {
    void Start()
    {
        // Return으로 (0, 0.5f, 0)라는 값을 Subscribe 안으로 흘려보낸다.
        Observable.Return(new Vector3(0, 0.5f, 0))
            .Subscribe(v => gameObject.transform.position = v);

        // 마우스 좌클릭 시 값을 푸시한다!
        this.UpdateAsObservable().Where(_ => Input.GetMouseButton(0))
            .Subscribe(l => Move(0.01f, 0));
    }
}
  • LINQ의 Where이기 때문에, Input.GetMouseButton(0)이 true일 때만 이곳을 통과한다. 따라서 이걸 통과한 값만 Subscribe까지 처리가 된다!

 

Select

using UnityEngine;
using System.Collections;
using UniRx;
using UniRx.Triggers;

public class Select : Base {
    void Start()
    {
        Observable.Return(new Vector3(0, 1.5f, 0))
            .Subscribe(v => gameObject.transform.position = v);

        this.UpdateAsObservable().Select(_ => 2)
        .Subscribe(l => Move(0.01f * l, 0));
    }
}

2배 빠르게 이동한다!

 

실행 결과

 

 

해당 포스트는 다음의 포스트를 보며 개인 기록용으로 메모하였습니다. 양질의 지식을 제공해 주신 Marimoiro 님께 감사드립니다.

https://qiita.com/Marimoiro/items/5127e34de0f80e6e33fc

 

UniRxのシンプルなサンプル その2(WhereとSelect) - Qiita

UniRxのシンプルなサンプルの取扱説明書 前(Subscribe) 次(FirstとTake) 初めてのフィルターメソッド IObservableはIEnumerableと対になっているからLINQの構文のWhereとか使える...

qiita.com

 

반응형
복사했습니다!