![article thumbnail image](https://blog.kakaocdn.net/dn/zgZfQ/btrK5DkM1se/cAvDUk331oc2jyvnArTIZ1/img.gif)
반응형
첫 필터 메소드
IObservable
은IEnumerable
와 쌍이 되어 있으니까, 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
반응형