LoginSignup
15
11

More than 5 years have passed since last update.

UniRxのシンプルなサンプル その11(シーケンスをつなげる Concat)

Last updated at Posted at 2015-05-24

UniRxのシンプルなサンプルの取扱説明書
前(プッシュを遅らせる Delay)
次(シーケンスをつなげる Concat)

シーケンスをつなげる

今回はシーケンスをつなげてプッシュするConcatを紹介します。

今回は150Frameの間上に移動しそのあと右に移動するようなオブジェクトを作ってみます。

前準備

ConcatSampleを張り付けたオブジェクトを作ります。

ソースコード

ConcatSample.cs
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)とすると以下のような挙動になります。
1. first.Subscribe(action)をする
2. firstがOnCompleteを発行するまで続ける
3. OnCompleteが発行されたらsecond.Subscrbe(action)する

という流れです。
(Subscribeといっていますが後続にWhereとかがつながっていればそれも一緒につなぎます。)
つまりfirstのプッシュがすべて完了したら、secondにバトンタッチするイメージです。

今回のfirstはOnCompleteを発行するような性質のものではないのでTake(150)でOnCompleteを発行させています。

上記のような動作なのでsecondにObservable.Timerを入れるとfirstのOnCompleteが発行されてからのカウントになりますし。UpdateAsObservableを使えばSubscribeするまでは読み捨てられます。

利用用途としてはたとえば、あるイベントが起きてから数フレームの間だけしたい動作などを記述するときに利用できそうです。

実行結果

150Frameの間上に移動しそのあと右に移動します。

15
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
11