自己紹介
インターンに向けて(合格すらしてないけど)プログラミング能力を高めたい大学2年。
MVPアーキテクチャの勉強
グラフィクス(VFX Graph、ShaderLabなど)を触りたい気持ちもあるのですが、我慢してインターンに向けて自分の強いところをさらに伸ばそうと思ってアーキテクチャの勉強をしています。
そんな中やっぱり避けて通れないDIやReactiveプログラミングなどの勉強をしているとMVPアーキテクチャに出会い色々コードを書いてみることに。
そこで感じた疑問を自分なりに解決したので記事にします。
疑問とは
DIを使うときにViewではPresenterを参照しないで、MonoBehaviourを継承するという書き方をしている方がちらほら。
というか、DIを使おうとすると自然にそうなりますよね。
入力を受けるためにはMonoBehaviourを継承する必要はあるけれど、、PresenterがMonoBahaviourを継承するのは普通に気持ち悪い!
そこで、なんとかしてPresenterが入力を受けられつつもMonoBehaviourを継承せずにする方法はないのか!!
という疑問です。
解決方法
Presenterで入力を受け取るですっ
※この行はなにも言ってません。
Presenterで入力を受け取ろう!
どうやって受け取るのかというとUniRxのObservable.EveryUpdate
を使います。
Observable.EveryUpdate()
.Where(_ => Input.GetKeyDown(KeyCode.Space))
.Subscribe(_ => /*処理*/).AddTo(view);
こんな感じ。
Observable.EveryUpdateはピュアなC#でも使うことができるため、入力を見ることができます。
まとめ
個人的には十分に満足した実装になりました。
UniRxが便利ですね。
まぁ正解かどうかはおいておいて…
さいごに
アーキテクチャを勉強し始めてそろそろ1週間が経つのですが、非常にいい感じですね。
Unityのアーキテクチャは結構おすすめとかまとまってる記事が少なくてターゲットを絞るのが一番難しいです。
ただ、次のステップとして勉強するのはありかなぁと思って勉強しています。
そろそろなにを勉強するのが正解なのか分からないお年頃です。