静寂とプログラミング

技術について書いたり、日常について書いたり

UniRx実装する時に使えるTips集

自分がUniRxで実装する時に調べたことや、有用な記事を項目別に分けてまとめていきます。 それぞれの記事について自分の読んだ感想を書いているので、参考になると幸いです。 随時更新していく予定です。

UniRx入門

まずはそれぞれの機能について知る必要がある。以下の記事を読めば、大体のUniRxの 機能を知ることができる。(理解できるとは言ってない)

UniRx入門 その1 - Qiita

UniRxの中核機能であるSubjectを主に説明している。Subject周りについてしっかり書かれていて 良いが、今まで他の言語を含めRxで書いたことのない人にとっては少々読むのは辛いかもしれない。

UniRx入門 その2 - メッセージの種類/ストリームの寿命 - Qiita

3つのメッセージのOnNext, OnError, OnCompleted
・OnNext:
・OnError:
・OnCompleted:
ストリームを正しく破棄しなければ、メモリリークを起こして、パフォーマンスを低下させる
・AddTo(gameObject):を書くことで、指定のGameObjectが破棄された時に自動的にDisposeを呼び出せば良い

UniRx入門 その3 -ストリームソースの作り方 - Qiita

ストリームソースの作り方

Subjectシリーズ

ReactivePropertyシリーズ

・ReactivePropertyはインスペクタービューに表示することが可能。MV(R)Pで真価を発揮するらしい。

ReactiveCollection

・状態の変化を通知する機能が内蔵されたListである。

ReactiveDictionary<T1, T2>

・ReactiveCollectionとほぼ同じ挙動

ファクトリメソッドシリーズ

・Subjectだけでは表現できないようなストリームを簡単に作るできる場合があるらしい。

  • Observable.Create

  • Observable.Start
    非同期で何か処理を走らせて、結果が出たら通知して欲しい時に利用することができる。

  • Observable.Timer / TimerFrame

UniRx.Triggersシリーズ

UniRxで一番重要かつ便利とのこと UnityのコールバックイベントをUniRxのIObservableに変換してくれる。

こルーチンから変換する

オペレーションチェーンで複雑なストリームを作るより、コルーチンと併用して手続き的に書いた方が 良い場合があるので、覚えておいて損はない。

uGUIイベントから変換する

実装するときの注意すること Tips

ReactivePorpertyについて

ReactivePropertyはSubjectの機能を使いやすくしたものと思っています。

UniRxを使ってゲームの進行を管理する手法 – ニムサイト

UniRxでMVP設計する

MVPで設計する時に参考になる書き方を紹介してくれている記事。
Web出身のUnityエンジニアによる大規模ゲームの基盤設計

PresenterとView間のやりとり

Presenter -> View
・View内では、Viewに関するプロパティを直接参照できないように、privateで宣言する。
・privateで宣言したものをpublicプロパティでgetterとして返す。
・ActionをPublicで宣言して、Presenter側でそれをPresenter側で処理内容を記述する。

PresenterとModel間のやりとり

Presenter -> Model
・Model側にPublic関数を用意してPresenterでそれを呼び出すようにする。
Model -> Presenter
・Model側にIReadOnlyReactivePropertyを公開プロパティとして用意してそれをPresenterで呼び出すようにする。

UniRxで書くときの原則

リアクティブスパゲティを避けるための2つの原則 │ Aiming 開発者ブログ