LoginSignup
13
10

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-05-03

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

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

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

前準備

今回もSkip,SkipWhileを作ってそれぞれにSkipSampleとSkipWhileSampleを貼り付けています。
スクリーンショット 2015-05-03 15.34.10.png

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が出来ました!
スクリーンショット 2015-05-03 15.55.51.png

13
10
3

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
13
10