2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Unity】VContainer + UniRxを使ったMVPパターンで入力はどこで受けるの?

Last updated at Posted at 2023-09-29

自己紹介

インターンに向けて(合格すらしてないけど)プログラミング能力を高めたい大学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のアーキテクチャは結構おすすめとかまとまってる記事が少なくてターゲットを絞るのが一番難しいです。

ただ、次のステップとして勉強するのはありかなぁと思って勉強しています。
そろそろなにを勉強するのが正解なのか分からないお年頃です。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?