UniRxのシンプルなサンプルの取扱説明書
前(FirstとTake)
次(Buttonが押されたら動くGameObjet)
途中まで実行しないメソッド
今回は途中までプッシュされてきた値をカットするメソッドです。
あるイベントが起こるまでSkipするということができます。
前準備
今回もSkip,SkipWhileを作ってそれぞれにSkipSampleとSkipWhileSampleを貼り付けています。
Skip
まずSkipでは最初の100回カットしてその後実行するようなGameObjectを作成します。
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します。
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が出来ました!