Unity++blog.

UnityやC#とかについて学習したことを書いてます

UniRx導入記事のまとめ

UniRxの前回記事はスライドの最初の1/3くらいを書いたので、残りの部分を後から思い出せるようにまとめメモ

 

UniRx導入

nabesi777.hatenablog.com

 

 

まとめるとUnitRxは

  • ストリームを用意して
  • ストリームをオペレータで加工して
  • Subscribeする

 

特徴として

  • 「時間」をすごい簡単に扱えるようになる
  • GUI周りの実装もすっきりかける
  • ゲームロジックに適用することもできる

 

UnitRxは便利だが難しい面もある

  • 学習コストが高くて概念的にも難しい
  • 導入する場合はプログラムの設計から考え直す必要が出てくる

 

基本的な仕組み・概念(34P~)

オペレータ、良く使うオペレータ(57P~)

 

応用例

  1. ダブルクリック(78P~) ダブルクリックの検知
  2. 値の変動を監視する(87P~)着地判定などに使用
  3. 値の変動を丸める(96P~)CharacterControllerのisGrounded斜面接地判定に使える
  4. WWWを使う(101P~) HTTP通信用モジュール
  5. PhotonUnity(111P~) ネットワーク対戦

 

注意点

  • UpdateAsObservable()は現在(2019/2)非推奨になっており、現在はusing UniRx.Triggers;を追加してthis.UpdateAsObservable()とする。
  • ObservableWWWは現在非推奨だが代替えのものは分からず

 

参考になるサイト(132P~)

 

補足(134P~)

  • Subject<T>
  • Subscribeの止め方
  • UpdateAsObservableとObservable.EveryUpdate

 

おまけ(138P~)

  • コルーチンをObservableに変換する
  • UniRx+コルーチン
  • カウントダウンタイマをつくるなら
  • HttpWebReqyestを使ってPUT/DELETE
  • UniRxでHttoWebRequest
  • ObserveOn (処理を行うスレッドを切り替えるオペレータ)
  • テキスト入力された時に検索サジェストを出す

 

書き写したコードはGist、「UniRx実例」へ

 

よく使うオペレータ

  •  Where (x=> x>10) 条件を満たすメッセージのみ通過させる
  •  Select(x=> 10* x) 要素の値を変換する
  • SelectMany 新たなストリームを生成して、そのストリームが流すメッセージを本流のストリームのメッセージとして扱う
  •  Throttle / ThrottleFrame 落ち着いたときに最後のメッセージを流す、メッセージが流れてきたら最後以外を無視する
  •  ThrottleFirst / ThrottleFirstFrame 最初にメッセージがきてから一定時間遮断する 大量のデータの最初だけつかいたいみたいな時に有効
  • Delay/DelayFrame メッセージの伝達を遅延させる
  • DistinctUntilChanged メッセージが変化した時のみ通知する(同じ値が連続している場合は無視する)
  • SkioUntil 指定したストリームにメッセージがくるまでメッセージをskipする
  • TakeUntil 指定したストリームにメッセージが来たら自身のストリームにOnCompletedを流して終了させる
  • Repeat ストリームがOnCompletedで終了した時にもう一度Subscribeを行う
  • SkipUntil+TakeUntil+Repeat イベントAが来てからイベントBがくるまでの間だけ処理したいような時に使う