ニートが学ぶUniRx uGUIとの連携

はいどーもおはようございますニートでございます。
今回はuGUIとの連携を色々と試してみたいと思います。
参考にするのは以下のスライドです。
https://speakerdeck.com/grabacr07/unirx-toka-reactive-property-toka

作成するもの

今回作成するのは「InputFieldに何かが入力されていてかつ、ToggleがOnならButtonがクリック可能な状態になる」「その他の状態はクリック不能状態になる」という機能です。
想定としては「同意チェックボックス」があって、その同意チェックボックスを押したらInputFieldの内容を送信可能になる、というものです。
まあインターネットのアンケートとかを考えてもらえれば早いんじゃないでしょーか。
ちなみにスライドで作られているものは、これよりもう少し簡単です。

なにはともあれコードをドン。

はい以上です。
_canEnableModelの部分が若干複雑ですね。
この部分は条件が複雑になればなるほど込み入ってしまうので、やり方がマズイですかねえ……。
もっといい方法があれば知りたいです。

計算する処理

スライドをもう少し進めるとSimpleCalculationというものが紹介されています。
これはそのまま作ったのでコードは省略します。
onValueChange.AsObservableとOnValueChangeAsObservableの違いは覚えておきたいです。
あとはストームの合成もといCombineLatestの使い方を知れたことが大きいでしょうか。

ちなみにですが、実際のゲームでスライドのコードを使う場合、InputFieldの内容をきちんとパースしないとエラーが出るので注意した方がよいですね(そのまま使う人はまずいないとは思いますが……)。

特定の条件を満たしたときに勝手に反応するプロパティ

特定の条件を満たしたとき、フラグを真にしたいことってあると思います。
ReactivePropertyの使い方の一つのようなのですが、特定の条件を満たしたとき勝手に値を変更してくれるReadOnlyReactivePropertyを簡単に作成する方法があります。
具体例は以下のような感じ。

注目するべきは

ここですね。
現在のHPが0以下になったらTrueになるReadOnlyReactivePropertyを作成しています。

ただよくわからないのが、ToReadOnlyReactivePropertyを実行したタイミングで一回IsDeadのSubscribeが実行されていることですかね。
死んだ判定をしてほしくなかったのでWhere区でtrueのときだけSubscribeするようにしました。
まだまだ理解不足ですねえ……。

あるいは

こんな感じにしてもよいかもしれません。
こうすると、他の場所でSubsribeしてもWhere(x => x)を挟まなくてもよくなります。
ただそのままだと使えなかったので、System.IObservable型に変えました。

MV(R)Pパターン

簡単なサンプルが紹介されていました。
これは書くほどではないかなと思ったので省略します。

終わりに

uGUIとの連携と書いたものの、uGUIと関係してるの半分くらいですかねw
まあそういうこともあるということで。

それにしてもUniRxをバリバリに使えるようになれると楽しそうですねえ……。
ほなそんな感じでまた。

フォローする