UniRx용 단순 샘플 3(First 및 Take)
전면(Where 및 Select)
다음(Skip 및 SkipWhile)
첫 번째 방법밖에 없어요.
Rx의 편리한 기능이 되었습니다.
이번에는 IEnumberable의 LINQ에서 빈도가 높지 않은 First와 Take입니다.
(특히 Take는 사용해 본 적이 있나...?)
Rx를 한 번 돌리면 매우 편리한 방법이 된다.
이런 것들은 처음 한 번만 실행하고 싶거나 처음 몇 번만 실행하고 싶을 때 활발하다.
예를 들어 상대방이 첫 번째 발송 버튼만 반응했으면 좋겠어요.
예를 들어, HP가 0일 때 처리하지 않으려는 객체
이런 데서 사용할 수 있어요.
미리 준비하다
예를 들어 TakeWhile, Take, First를 만들고 각각의 Sample 스크립트를 붙인다.
First
First는 프레임 100 이후 한 번에 1.5f 오른쪽으로만 이동하는 객체입니다.
코드 여기 있어요.
FirstSampleusing UnityEngine;
using System.Collections;
using UniRx;
using UniRx.Triggers;
public class First : Base
{
// Use this for initialization
void Start()
{
gameObject.transform.position = new Vector2(0, 1f);
//クリックされたら右に1.5動かす(但し1回だけ)
this.UpdateAsObservable()
.First(l => Input.GetMouseButton(0))
.Subscribe(l => Move(1.5f, 0));
}
}
이번부터 바로 초기 위치로 대입한다.
First(Func predicate)를 사용하면 지정된 predicate와 일치하는 값을 처음 누릅니다.
그러니까 인풋.GetMouseButton(0)이 트루로 변경되면 객체는 1.5f를 한 번만 이동합니다.
(First에는 Where와 함께 또는 활동을 처음 수행할 수 있는 매개변수 없이 과부하가 있습니다.
Take
그 다음에 Take는 처음 몇 번의 요구만 처리하고 싶다고 대답할 것이다.
여기는 100Frame 사이에서만 0.01f를 이동합니다.
TakeSampleusing UnityEngine;
using System.Collections;
using UniRx;
using UniRx.Triggers;
public class TakeSample : Base {
// Use this for initialization
void Start () {
gameObject.transform.position = new Vector2(0, 0.5f);
//Takeで最初の100回以外はカット
this.UpdateAsObservable()
.Take(100)
.Subscribe(l => Move(0.01f, 0));
}
}
Take(int n)는 처음 n번만 밀어냅니다.
실제로 다음 TakeWhile을 소개하지는 않았지만 TakeUnitil 같은 건 더 많이 쓸 것 같아요.
TakeWhile
TakeWhile은 지정된 기준에 따라 실제 기간 값을 지속할 수 있는 편리한 방법입니다.
이번에 제작된 것은 x가 2를 넘기 전에 오른쪽으로 이동하는 게임오브젝트입니다.
TakeWhileSampleusing UnityEngine;
using System.Collections;
using UniRx;
using UniRx.Triggers;
public class TakeWhile : Base
{
// Use this for initialization
void Start()
{
gameObject.transform.position = new Vector2(0, 1.5f);
//Takeでxが2を超えたらそれ以降はカット
this.UpdateAsObservable()
.TakeWhile(l => gameObject.transform.position.x <= 2)
.Subscribe(l => Move(0.01f, 0));
}
}
TakeWhile(Func predicate)은 predicate가 일치할 때까지 흐르는 값을 계속 누릅니다.
그래서 상술한 코드는 l=>gameObject입니다.transform.position.x<=2를 만족시키기 전에 Subscribe에 가지만 그 다음 값은 Subscribe에 전달할 수 없습니다. 결과적으로 x==2 정도가 운행을 중지합니다.
실행 결과
따라서 각 대상의 정지 위치는 이렇다.
이번에는 여기까지.
Reference
이 문제에 관하여(UniRx용 단순 샘플 3(First 및 Take)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Marimoiro/items/b24510b0ffd273f69f8a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
using UnityEngine;
using System.Collections;
using UniRx;
using UniRx.Triggers;
public class First : Base
{
// Use this for initialization
void Start()
{
gameObject.transform.position = new Vector2(0, 1f);
//クリックされたら右に1.5動かす(但し1回だけ)
this.UpdateAsObservable()
.First(l => Input.GetMouseButton(0))
.Subscribe(l => Move(1.5f, 0));
}
}
using UnityEngine;
using System.Collections;
using UniRx;
using UniRx.Triggers;
public class TakeSample : Base {
// Use this for initialization
void Start () {
gameObject.transform.position = new Vector2(0, 0.5f);
//Takeで最初の100回以外はカット
this.UpdateAsObservable()
.Take(100)
.Subscribe(l => Move(0.01f, 0));
}
}
using UnityEngine;
using System.Collections;
using UniRx;
using UniRx.Triggers;
public class TakeWhile : Base
{
// Use this for initialization
void Start()
{
gameObject.transform.position = new Vector2(0, 1.5f);
//Takeでxが2を超えたらそれ以降はカット
this.UpdateAsObservable()
.TakeWhile(l => gameObject.transform.position.x <= 2)
.Subscribe(l => Move(0.01f, 0));
}
}
Reference
이 문제에 관하여(UniRx용 단순 샘플 3(First 및 Take)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Marimoiro/items/b24510b0ffd273f69f8a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)