8
9

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 5 years have passed since last update.

【Unity】設計手法

Last updated at Posted at 2019-12-09

エンティティコンポーネント

・Unityの開発思想で、必要に応じて機能(コンポーネント)をオブジェクトに付加する。
・従来のゲームオブジェクトで発生しがちな複雑な継承関係も生まれにくい。

AMVCC (Application-Model-View-Controller-Component)

・1.の参考サイトでの設計手法。(一般的なものではない。)
・Unityは参照地獄になりやすく、どこに何がアタッチされているのかが複雑になりやすい。
 ⇒ それを解決すべくApplicationからすべてのMVCを参照できるようにしてしまえという考え。
・MVCに属さないUtility的な機能はComponentに位置する。
・データの通知は
 ①View -> Application (onclickなどのアクションをトリガーとして通知する。
 ②Application -> Controller (viewから受け取った通知をすべてのControllerに伝達する。)
 ③Controller -> view or model (Controllerで対象となる通知を受け取った際はviewやmodelを更新する。)

MVC設計

・Model, View, Controllerの3層からなる。
・TriggerはControllerの呼び出し。
・ModelからViewへ通知するタイプ
  ⇒ Model, Viewの依存が発生する
・Controllerを介してModelを更新後Viewへ通知する。
  ⇒ Model と Viewの仲介を果たすので役割が大きくなる?(と記事にはあるが、あまりその感覚がない。)

MVP設計

・Uni(Rx)と呼ばれるUnityのフレームワークが必要となる。
・Model, View, Presenterの3層からなる。
・PresenterはViewとModelの連動をフレームワークを用いて登録する?
・TriggerはUni(Rx)の機能を使って登録する。(簡単なサンプルを見ただけなのでだいぶ憶測)

現状どうしているか

・現在作成しているカードゲームでは、AMVCCもどきで
 ルートのGameManagerに必要なController全て突っ込んでいる。(GetComponentを使えば、ModelとViewも取得できてしまう。)
・イベント通知はせず、必要に応じてGameManagerからデータを取得し、そのコントローラを呼び出している。
(ModelとViewを直接更新しないようにはしている。)
その他問題点があれば随時記載。
・model側で値の編集が必要になった際、modelとcontrollerに値を変更する同一メソッドを二つ定義しなければならないのが手間である。

参考サイト

1.Unity with MVC: How to Level Up Your Game Development
UniRxでMV(R)Pパターンをやってみた
Web出身のUnityエンジニアによる大規模ゲームの基盤設計
若輩エンジニアから見たUniRxを利用したゲーム開発
Webアプリケーション開発者から見たMVCとMVP、そしてMVVMの違い

8
9
1

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
8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?