へっぽこ日記

Unity関係のつぶやきまとめ。マイコンとかもいじります。

UniRxでMV(R)Pパターンを構築する

はじめに

今回はUniRxでMV(R)Pパターンを構築する記事です。

MVPパターン*1を実装する方法として、単純にUniRxを使うパターン、ZenjectなどのDIを併用して使うパターン(VContainerとか)などありますが、今回はUniRxをつかって実装していきたいと思います。

 

Web上ではMVPパターンについての記事やブログを見かけますが、今回はこちらの方の実装方法を参考にしたいと思います*2

qiita.com

 

サンプルプロジェクト

github.com

 

そもそもMVPパターンとは

 

設計パターンの一つで、UI関係に使われることが多い。各クラスの機能や、責任を高めることで、他クラスへの影響を下げる(疎結合)ことを目的としたものらしい。

こんな感じ


VIewは見た目全般を指していて、Buttonコンポーネントやそのボタンのアニメーションコードを含まれる。

Modelは実体を保持するが、ここでの実体はPlayerのHPなどを指していると思って構わない。

PresenterはViewとModelの橋渡しを行い、ViewとModelを疎結合にする役割を持っている(そして、この操作と通知をUniRxが支えているイメージ)。

 

ゲージで試しに実装してみる

経験値やランクのゲージを意識して作りました。

 

Presenterに実行することだけを意識したりしました(他クラスにメソッドを定義・実装だけしておく)。

gist878e7d664d1fb8930f5dfb678b09b8fe

gist0a2973e74772485d2875e66ef249bc61

gist9a1f53ac5b46e9359acddb733036954c

 

以下の画像のとおりViewとModelが互いの存在をしらない状態にすることで、疎結合を実現できました。

 

 

色々ともりもりしすぎたので、各々のクラスの責任が重くなってますが、機能はうまく分けることが出来たと思います。今回はMVPパターンを試すのが目的だったのでやりませんでしたが、実際に使うならもう少しオブジェクト単位でクラスを分けるべきでしたね。

 

おわりに

MVPパターンを実装する方法として、UniRxを使う方式を試しにしてみました。UniRxでも実装はできるのですが、DIに頼ってみるとより良いコードが実装できそうです。あくまで、今回実装したものは参考程度にお考え下さい。

 

是非、読者登録をしていただくと助かります!

*1:アーキテクチャと云う方が一般的らしい

*2:UniRx/UniTask完全理解でおなじみの「とりすーぷ」さん