Switchオペレータの使い方です。
ちょっと複雑ですがとても便利なオペレータです。
使い方の例
次のスクリプトは、Aキーを入力した時点のフレーム数を一定間隔で表示し続けるものです。
もう一度Aキーを入力すると、一定間隔で「その時点のフレーム数」と「前回入力時のフレーム数」の両方が表示され続けます。
// Aキーを押すと、その時のフレーム数が一定間隔で表示され続ける // もう一度押すと、その時のフレーム数と前回のフレーム数が一定間隔で表示され続ける Observable.EveryUpdate() .Where(_ => Input.GetKeyDown(KeyCode.A)) .Select(_ => Time.frameCount) .SelectMany(x => Observable.IntervalFrame(60).Do(_ => Debug.Log(x))) .Subscribe() .AddTo(this);
最新のクリック時だけの情報が欲しい場合、SelectManyを使う代わりにSelect + Switchを使います。
すると、最新のクリック時のフレーム数だけが表示されるようになります。
// Aキーを押すと、その時のフレーム数が一定間隔で表示され続ける // もう一度押すと、その時のフレーム数が表示され続ける(前回のフレーム数は表示されない) Observable.EveryUpdate() .Where(_ => Input.GetKeyDown(KeyCode.A)) .Select(_ => Time.frameCount) .Select(x => Observable.IntervalFrame(60).Do(_ => Debug.Log(x))) .Switch() .Subscribe() .AddTo(this);
つまりSwitchを使うと、根元のストリームから発行された値のうち最新のもののみが有効になり、それ以外はキャンセルされます。
実用例
キャラクターの切り替え処理などに使えるようです。なるほど。
インクリメンタルサーチにも使えるようです。なるほどなるほど。