@Baiteen
ReactiveExtensionsがUnityでも使えるってのを今更知ったので、今更ながら使ってみた。その8。
やりたいこと
ReactiveExtensionsを使ってクリック回数が偶数なら赤のCubeを、奇数なら青のCubeを動かす。前回の記事からちょっとしか変わってないので、変更分だけ書くことにした。
変更したところ
SphereScriptのOnMouseDownAsObservableの文を以下のように変更する。
//クリック回数のストリームとして変数に保持
var clickCountStream = OnMouseDownAsObservable ()
.Buffer (OnMouseDownAsObservable ().Throttle (System.TimeSpan.FromMilliseconds (250)))
.Select (xs => xs.Count);
//クリック回数が偶数なら、クリック回数に比例した右向きの力を赤い四角に加える
clickCountStream
.Where(cnt => cnt % 2 == 0)
.Do(cnt => redRigidbody.AddForce(Vector3.right * cnt * 10))
.Subscribe (t=>Debug.Log(t));
//クリック回数が奇数なら、連打イベントを発生させる
clickCountStream
.Where(cnt => cnt % 2 != 0)
.Do(cnt => OnBarrage(new BarrageEventArgs(cnt)))
.Subscribe (t=>Debug.Log(t));
//クリック回数をテキストにセット
clickCountStream
.Do(cnt => text.text = string.Format ("{0} clicks", cnt))
.SelectMany(cnt =>
//1秒かけて0→1、また1秒かけて1→0ってなってほしいんだけど、0→1、1→2ってなる。意味不明。
TakeSec(1).Do(t=>text.setA(t)).Last().SelectMany(_=>TakeSec(1).Do(t=>text.setA(1-t)))
)
.Subscribe (t=>Debug.Log(t));
これで完成。
今回はうに部屋に投稿するのは辞めました。ランキングにノイズが入ってしまうので。。。
適当に実行してください。
