2014年11月1日土曜日

【Unity、UniRx】クリック回数が偶数なら赤を、奇数なら青を動かす


@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));

これで完成。
今回はうに部屋に投稿するのは辞めました。ランキングにノイズが入ってしまうので。。。
適当に実行してください。


スポンサーリンク

Related Posts Plugin for WordPress, Blogger...