MawaLog

一日一日、楽しく生きる。技術と音楽が好き。

Unity::UniRx自分用メモ::基礎、Where、Select、TakeWhile

f:id:k_mawa:20180405143952j:plain

参考資料

qiita.com

qiita.com

qiita.com

コードの機能メモ

using UniRx;
using UniRx.Triggers;


 void Start () {
        //Returnは、なんらかの値をSubscribe内に流し込む機能
        //今回はVenctor2(1,1)
        Observable.Return(new Vector2(1, 1))
            .Subscribe(v => gameObject.transform.position = v);
            //インデント一個分空けて、Subscribe実装
            //Subscribe(ラムダ式)で出力を決定

        this.UpdateAsObservable().Subscribe(_ => Move(0.01f, 0));
        //フレームごとにSubscribe。移動する関数Moveで処理。
}

void Update(){
}
//UpdateAsObservable()があるので使わなくなる?!

public void Move(float dx, float dy) //引数にフロート入れて
    {
        gameObject.transform.position += new Vector3(dx, dy, 0);
        //transform.positionで座標を引数分移動
    }

いくつか便利なメソッドをピックアップ

Where

//クリックされてたら(されているときだけ)、
.Where(_ => Input.GetMouseButton(0))
.Subscribe(_ => Move(0.01f, 0));
//Subscribeへ

Select

//Selectで値を2に指定
.Select(_ => 2.0f) //floatじゃないとエラーになった(たぶん)
.Subscribe(l => Move(0.01f * l, 0)); //float同士の演算にする必要あり?!(とりあえずこれで動いた)
//Subscribeへ
//0.01f * l

TakeWhile

//gameObject.transform.position.x <= 4の間は値を流す
.TakeWhile(l => gameObject.transform.position.x <= 4
.Select(_ => 2.0f)) //Selectで値を2に指定
.Subscribe(l => Move(0.01f * l, 0)); //float同士の演算にする必要あり?!(とりあえずこれで動いた)
//Subscribeへ
//0.01f * l