UniRxのシンプルなサンプルの取扱説明書
前(プッシュを遅らせる Delay)
次(シーケンスをつなげる Concat)
#シーケンスをつなげる#
今回はシーケンスをつなげてプッシュするConcatを紹介します。
今回は150Frameの間上に移動しそのあと右に移動するようなオブジェクトを作ってみます。
#前準備#
ConcatSampleを張り付けたオブジェクトを作ります。
#ソースコード#
using UnityEngine;
using UniRx;
using UniRx.Triggers;
using System.Collections;
public class ConcatSample : Base {
// Use this for initialization
void Start () {
//最初の150Frameはこれ
var first = this.UpdateAsObservable ().Select (_ => new Vector2 (0, 0.01f));
//150Frame以降はこれ
var second = this.UpdateAsObservable().Select (_ => new Vector2 (0.01f, 0));
first.Take(150).Concat (second).Subscribe (v => Move(v.x,v.y));
}
}
今回は2本のシーケンスを使ってやってみます。
一つ目(first)は、new Vector2 (0, 0.01f)をプッシュし続けるシーケンスです。
二つ目(second)は、new Vector2 (0.01f, 0)をプッシュし続けるシーケンスです。
first.Concat(second).Subscribe(action)とすると以下のような挙動になります。
- first.Subscribe(action)をする
- firstがOnCompleteを発行するまで続ける
- OnCompleteが発行されたらsecond.Subscrbe(action)する
という流れです。
(Subscribeといっていますが後続にWhereとかがつながっていればそれも一緒につなぎます。)
つまりfirstのプッシュがすべて完了したら、secondにバトンタッチするイメージです。
今回のfirstはOnCompleteを発行するような性質のものではないのでTake(150)でOnCompleteを発行させています。
上記のような動作なのでsecondにObservable.Timerを入れるとfirstのOnCompleteが発行されてからのカウントになりますし。UpdateAsObservableを使えばSubscribeするまでは読み捨てられます。
利用用途としてはたとえば、あるイベントが起きてから数フレームの間だけしたい動作などを記述するときに利用できそうです。
#実行結果#
150Frameの間上に移動しそのあと右に移動します。