Unity::UniRx自分用メモ::基礎、Where、Select、TakeWhile
参考資料
コードの機能メモ
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で座標を引数分移動 }
Observable.Return・・・.Subscribeで初期位置指定して、.UpdateAsObservable() でフレームごとに移動。 #UniRx #Unity pic.twitter.com/88I7s14lLQ
— mawa (@k_mawa82) 2018年4月6日
いくつか便利なメソッドをピックアップ
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
引き続きUniRx基礎 だんだん便利さの理解が深まってきた!
— mawa (@k_mawa82) 2018年4月6日
.TakeWhile(l => gameObject.transform.position.x <= 4 //xが4以下のときだけ
.Select(_ => 2.0f))
.Subscribe(l => Move(0.01f * l, 0)); //Selectの比率で 右に移動 #Unity #UniRx pic.twitter.com/Yh2SgNByxU