UniRxのシンプルなサンプル その4(SkipとSkipWhile)


UniRxのシンプルなサンプルの取扱説明書
前(FirstとTake)
次(Buttonが押されたら動くGameObjet)

途中まで実行しないメソッド

今回は途中までプッシュされてきた値をカットするメソッドです。
あるイベントが起こるまでSkipするということができます。

前準備

今回もSkip,SkipWhileを作ってそれぞれにSkipSampleとSkipWhileSampleを貼り付けています。

Skip

まずSkipでは最初の100回カットしてその後実行するようなGameObjectを作成します。

SkipSample
using UnityEngine;
using System.Collections;
using UniRx;
using UniRx.Triggers;

public class Skip : Base
{

    // Use this for initialization
    void Start()
    {
        gameObject.transform.position = new Vector2(0, 1f);

        //Skipで最初の100回カット
        this.UpdateAsObservable().
            Skip(100).
            Subscribe(_ => Move(0.01f, 0));
    }

}

Skipは指定された回数だけプッシュした値を握りつぶすわけです。

さて、このメソッド何かに使えるんだろうか…?

SkipWhile

今度はSkipWhileでクリックされるまでSkipします。

SkipWhile
using UnityEngine;
using System.Collections;
using UniRx;
using UniRx.Triggers;

public class SkipWhile : Base {

    // Use this for initialization
    void Start()
    {
        gameObject.transform.position = new Vector2(0, 0.5f);

        //!Input.GetMouseButton(0)の間スキップ
        this.UpdateAsObservable()
            .SkipWhile(_ => !Input.GetMouseButton(0))
            .Subscribe(_ => Move(0.01f, 0));
    }
}

!Input.GetMouseButton(0)がtrueの間値を握りつぶします。
ちなみにですがこの用途だとSkipUntilのほうが良さげです。

そして一度通過させた後はマウスを離しても動作が停止しないことに気をつけてください。
一度条件がととのったら後はざるです。

さて、こちらのSkipWhileメソッドですが、色々使い道がありそうです。
あるイベントが発行されるまでは動作しないっていうのが作れますね。
フラグ回収してねって話です!わお!

実行結果

というわけで今回は100フレームまで動かないGameObjectとクリックするまで動かないGameOjectが出来ました!