ニートが学ぶUniRx 入門編その3

はいどーもこんにちはReactiveなニートです。
今回はストリームソースの作り方を学んでいきたいと思います。
例のごとくとりすーぷさんの記事を参照しながら進める、ただの備忘録なので内容の正確性は保証しません。
https://qiita.com/toRisouP/items/86fea641982e6e16dac6

ストリームソースってなんやねん

とりすーぷさんの記事でいきなり「ストリームソース」なる用語が飛び出してきますが、これは「ストリームを開始する最初のオブジェクト」といった程度の意味でしょうか。
具体的にどんなものがあるのかの一覧はとりすーぷさんの記事をご覧ください。

ReactiveProperty

UniRxを使用しているコードで非常によく見かけるのがこのReactivePropertyです。
現状は「値が変更されたときにOnNextが発火する」くらいの認識(オペレータを利用することで発火する際の条件ももちろん指定できるでしょう)ですが、一点だけ注意したい部分がありました。
それは「Subscribe時に現在の値も発行される」ということです。
この仕様を見逃して「なんか変な動きなってるよー」とかならないように注意しておきたいです。
あとは直感的に使用できそうな香りがします。

ReactiveCollection

ReactivePropertyのコレクション版ですかね。
オペレータにObserveAddやObserveRemoveを指定することができます。
つまりコレクションにオブジェクトが追加されたときイベントを発行したり、削除されたときにイベントを発行したりするわけですね。
めちゃ便利そう。

類似のものにReactiveDictionaryもあります。
内容はだいたい想像できるんじゃないでしょーか。

ファクトリメソッド

UniRxのファクトリメソッドとは「ストリームソース構築メソッド群」のことらしいです。
名前の通り、いわゆるファクトリパターンを想像すればよい感じですかね。

紹介されている中で一番簡単そうなのはObservable.Timer/TimerFrameでしょうか。
無限ループさせる系のコルーチンを使う代わりにこれ使ってもよさそうですね。

その他の具体例はとりすーぷさんの記事を見てもらった方がよいんじゃないでしょーか。
きちんと理解できたら何か書きたいですねえ……。
Observable.Startとかめっちゃ便利そうですし。

UniRx.Triggers

とりすーぷさんによれば「UniRxではこれが一番重要かつ便利」らしいです。
「UnityのコールバックイベントをUniRxのIObservableに変換して提供」するものらしいですが、説明だけではよくわからないのでさっそく何かコードを書いてみましょう。

適当なオブジェクトにBoxColliderコンポーネントをつけて、上記のコードをもったスクリプトを貼り付けてゲームを実行してみます。
するとオブジェクトをマウスでクリックすると、デバッグログに「どっかーん!」と表示されました。
IPointerDownHandlerインターフェイスを実装したのときとほぼ同じ動きになるのかな? と思いました。
もちろん他にも様々なトリガーがありますよ。
これは便利ですね!

ただ今のところ「UniRxではこれが一番重要かつ便利」と言うほどの理由がよくわかりません。
引き続き調べていきたいですね。

MV(R)Pパターン

ViewとModelがどうのこうのの、あの例のパターンに似たもののようです。
uGUIと相性がよいらしいのですが、詳しい説明がなかったのでいまいちよくわかりませんでした。
コード的にはこんな感じになるらしい。

次回の記事で解説があるらしいので、僕も今はサンプルコードを眺める程度だけにしておきます。

ObserveEveryValueChanged

「任意のオブジェクトのパラーメタを毎フレーム監視して変化があった時に通知する」ストリームのようです。
UniRxに慣れていないのでコードが何をしているのかちょっとよくわからなかったので、コメントをつけてみました。

こんな感じですかね。
便利そうですが、これって重いんでしょうかね……。
そのへんがちょっとだけ気になります。

終わりに

今回の記事は「ストリームソースの作り方概観」みたいな感じでした。
MV(R)PパターンやらUniRx.Triggersやらの詳しい説明も読んでみたいですね。

ほなそんな感じでまた。

フォローする