UniRx의 간단한 샘플 2(Where 및 Select)
전면(Subscribe)
다음(First 및 Take)
첫 번째 필터 방법
IObservable와 IEnuumerable는 짝을 이루기 때문에 LINQ의 문법Where를 사용할 수 있습니다!
그 얘기 들었을 때 그렇게 생각했어.
하?
마음에 안 드는 말을 했는데 왜 LINQ가 나오는지 모르겠어요.
한결
제1회 카페 Extensions 개요 활용 방법
인터페이스의 성립 자체가 IEnumberable/IEnuumerator 인터페이스가 반전되어 있기 때문이다.
아아아아?
실제로 LINQ는 다양한 값을 추정할 수 있다고 한다.
그리고 반전 같은 건 신경 안 써도 돼.
많은 것을 사용한 후에 확실히 이해할 수 있다.
이해하지 못할 때 깊이 생각하면 나처럼 좌절하게 된다.
그럼 이번에는 Where와 Select 이야기.
미리 준비하다
이번부터 무브 메서드를 보유한 베이스 레벨을 정의해 계승한다.
(Rx 섹션 이외의 섹션을 생략하기 위해)
Base.csusing UnityEngine;
public class Base : MonoBehaviour {
/// <summary>
/// (dx,dy)だけ移動させる
/// </summary>
/// <param name="dx"></param>
/// <param name="dy"></param>
public void Move (float dx,float dy) {
gameObject.transform.position += new Vector3(dx, dy, 0);
}
}
이번에는 지난번 Subsribe 대상 외에도 셀렉트, Where 대상을 제작했다.
빨간색은 Subscribe, 파란색은 Where, 녹색은 Select.
Where Sample와 Select Sample를 각각 붙인다.
Where
WhereSample은 이러한 코드입니다.
WhereSampleusing UnityEngine;
using System.Collections;
using UniRx;
using UniRx.Triggers;
public class WhereSample : Base {
// Use this for initialization
void Start () {
//Returnで(0,0.5)という値をSubscribe内に流し込んでる
Observable.Return(new Vector2(0, 0.5f)).Subscribe(v => gameObject.transform.position = v);
//Whereで左クリックの間しか値がプッシュされないようにしている
this.UpdateAsObservable()
.Where(_ => Input.GetMouseButton(0))
.Subscribe(l => Move(0.01f, 0));
}
}
초기에 위치가 바뀌었어요. 일단 놔두세요.
Update ASObservable () 다음에 Where (= > Input.GetMouseButon (0)) 이 끼어 있습니다.
이것은 LINQ의 Where이기 때문에 Input입니다.GetMouseButton(0)이 진짜일 때만 이곳을 통과할 수 있습니다.
이 값을 통해서만 Subscribe로 처리할 수 있습니다.
결과적으로 왼쪽 단추를 눌렀을 때만 오른쪽으로 이동한다.
Select
다른 한편, Select는 투영이 미뤄지는 방법이다.
SelectSampleusing UnityEngine;
using System.Collections;
using UniRx;
using UniRx.Triggers;
public class SelectSample : Base {
// Use this for initialization
void Start () {
//Returnで(0,1)という値をSubscribe内に流し込んでる
Observable.Return(new Vector2(0, 1.5f)).Subscribe(v => gameObject.transform.position = v);
//Selectを使って入力を加工してあげる
this.UpdateAsObservable()
.Select(_ => 2)
.Subscribe(l => Move(0.01f * l, 0));
}
}
이번에는 Update ASObservable 다음에 Select (l=>2) 를 끼고 있습니다.
이렇게 되면 유입된 값이 2가 된다.(지금까지 유닛형이라는 의미 없는 값을 넣었다.)
이후 Subscribe는 Subscribe(l=>Move(0.01f*l, 0)이다.0.01의 l배로 이동합니다.l==2로 인해 이동 속도가 0.01의 Subscribe보다 2배 빠르다.
시행해 보았다
그래서 결과는 이렇게 됐다.
이번에는 여기까지.
Reference
이 문제에 관하여(UniRx의 간단한 샘플 2(Where 및 Select)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Marimoiro/items/5127e34de0f80e6e33fc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
아아아아?
실제로 LINQ는 다양한 값을 추정할 수 있다고 한다.
그리고 반전 같은 건 신경 안 써도 돼.
많은 것을 사용한 후에 확실히 이해할 수 있다.
이해하지 못할 때 깊이 생각하면 나처럼 좌절하게 된다.
그럼 이번에는 Where와 Select 이야기.
미리 준비하다
이번부터 무브 메서드를 보유한 베이스 레벨을 정의해 계승한다.
(Rx 섹션 이외의 섹션을 생략하기 위해)
Base.cs
using UnityEngine;
public class Base : MonoBehaviour {
/// <summary>
/// (dx,dy)だけ移動させる
/// </summary>
/// <param name="dx"></param>
/// <param name="dy"></param>
public void Move (float dx,float dy) {
gameObject.transform.position += new Vector3(dx, dy, 0);
}
}
이번에는 지난번 Subsribe 대상 외에도 셀렉트, Where 대상을 제작했다.빨간색은 Subscribe, 파란색은 Where, 녹색은 Select.
Where Sample와 Select Sample를 각각 붙인다.
Where
WhereSample은 이러한 코드입니다.
WhereSample
using UnityEngine;
using System.Collections;
using UniRx;
using UniRx.Triggers;
public class WhereSample : Base {
// Use this for initialization
void Start () {
//Returnで(0,0.5)という値をSubscribe内に流し込んでる
Observable.Return(new Vector2(0, 0.5f)).Subscribe(v => gameObject.transform.position = v);
//Whereで左クリックの間しか値がプッシュされないようにしている
this.UpdateAsObservable()
.Where(_ => Input.GetMouseButton(0))
.Subscribe(l => Move(0.01f, 0));
}
}
초기에 위치가 바뀌었어요. 일단 놔두세요.Update ASObservable () 다음에 Where (= > Input.GetMouseButon (0)) 이 끼어 있습니다.
이것은 LINQ의 Where이기 때문에 Input입니다.GetMouseButton(0)이 진짜일 때만 이곳을 통과할 수 있습니다.
이 값을 통해서만 Subscribe로 처리할 수 있습니다.
결과적으로 왼쪽 단추를 눌렀을 때만 오른쪽으로 이동한다.
Select
다른 한편, Select는 투영이 미뤄지는 방법이다.
SelectSample
using UnityEngine;
using System.Collections;
using UniRx;
using UniRx.Triggers;
public class SelectSample : Base {
// Use this for initialization
void Start () {
//Returnで(0,1)という値をSubscribe内に流し込んでる
Observable.Return(new Vector2(0, 1.5f)).Subscribe(v => gameObject.transform.position = v);
//Selectを使って入力を加工してあげる
this.UpdateAsObservable()
.Select(_ => 2)
.Subscribe(l => Move(0.01f * l, 0));
}
}
이번에는 Update ASObservable 다음에 Select (l=>2) 를 끼고 있습니다.이렇게 되면 유입된 값이 2가 된다.(지금까지 유닛형이라는 의미 없는 값을 넣었다.)
이후 Subscribe는 Subscribe(l=>Move(0.01f*l, 0)이다.0.01의 l배로 이동합니다.l==2로 인해 이동 속도가 0.01의 Subscribe보다 2배 빠르다.
시행해 보았다
그래서 결과는 이렇게 됐다.
이번에는 여기까지.
Reference
이 문제에 관하여(UniRx의 간단한 샘플 2(Where 및 Select)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Marimoiro/items/5127e34de0f80e6e33fc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)