ニートが学ぶUniRx uGUI再び

はいどーもこんにちは「三日もあればUniRxバリバリに使えるようになるやろ!」と思っていたのに、現実は「え? まだ全然わかってないんだけど?」という状況に絶望しているニートですよろしくお願いします。

あらかじめ言っておくと、この記事は誰かの参考になるようなことは何も書いていませんw

UniRx Quizをやってみた

今の自分の実力もとい理解力を試すため、UniRx Quizなるものを試してみました。
https://qiita.com/mattak/items/2004976baac566e835c6
2~3割くらいしかわかりませんでしたw
ただどんな機能があるのか知るのにはいいサンプルだと思ったので、他のUniRx入門者さんにもオススメしておきます。

ちなみに上記のサンプルプロジェクト、最新のUnityだと色々初期設定がめんどくさいことになるかもしれません。
2017系のUnityでかつ、プロジェクトを新規作成してから何もいじらないまま(.NETのバージョンとか)でインポートするとうまい具合に動くと思いました。

uGUI再び

ニートが学ぶUniRx uGUIとの連携」の記事中で「条件が複雑になればなるほど込み入ってしまう」と書きました。
すると、とりすーぷさんが以下のようなアドバイスをくれましたよ。


というわけでさっそく試してみました。
ですがSubscribeToInteractiveなるものが見つからなかったので、ひとまずReactiveCommandのみで。

ReactiveCommandってなんやねん

名前から察するにコマンドパターンのナンカでしょうね。
以下の記事をサラッと読んでみました。
https://qiita.com/toRisouP/items/c6fba9f01e6d15dabd79

ReactivePropertyがtrueの状態でのみ、Executeしたときに登録したイベントハンドラが実行される感じですかね。
これはuGUIに限らず使い道がかなりある予感がしています。
例えばストーリーを一定以上進めるとフラグがONになるようなシステムがあるとして、フラグがONの状態で特定のマップに入るとExecuteが実行されてどうたらこうたらとかですかね……。

他にはuGUIと一対一でBindすることも可能なようです。
つまりコマンドがExecute可能な状態なら、uGUIもinteractiveも自動でtrueになる、とかですね。
サンプルでも紹介されていますが、トグルの状態を監視してボタンのクリック可能/不可を管理するとかが一般的じゃないでしょうか(いわゆる投稿フォーム的な)。

AsyncReactiveCommand

これは面白いですよ!
とりすーぷさんの記事のサンプルを試してほしいのですが、例えばボタンを押すと外部のサイトから何らかの情報を取得するスクリプトがあるとします。
このとき「今情報を取得中ですよー」的なことを画面の見た目としてわかりやすくしたいですよね。
すると非同期の処理が必要になるわけですが、そこでAsyncReactiveCommandです。
ボタンを押した瞬間に(Executeした瞬間)にOnCompleted(もしくはOnError)になるのを待ち受け、それまでinteractive状態をfalseにしておくのです。
また、「1つのAsyncReactiveCommandを複数回Subscribeして非同期処理を並列で走らせた場合、すべての非同期処理が終わるまでAsyncReactiveCommandは有効状態に戻りません」とのことです。

終わりに

紹介してもらっといて何なんのですが、結局このReactiveCommandを使ってuGUIを思ったとおりに制御することはできませんでしたw
たぶん慣れたらうまい方法が思いつくんですかねえ……。
ですが前回書いたコードはちょっとシンプルできなので、その部分だけ抜粋しときます。

ただ「シンプルか?」と聞かれたら間違いなく「NO」なので、やはり何かがおかしいのかもしれません……。

ほなそんな感じでまた。

フォローする