ゲーム制作におけるModelViewController

アバター
TOMY
記事: 53
登録日時: 13年前
住所: 愛知県
連絡を取る:

ゲーム制作におけるModelViewController

投稿記事 by TOMY » 10年前

お久しぶりです。
ゲーム作りたくても思ったとおりにコードが書けない、素材が作れない、そもそも腕が酷いと、此処最近の酷い鬱を堪えながらも生きてます。
現在、研修としてお世話になっている会社で、社内用のWebづくりを勉強がてらと作らせていただいたのですが、人生初めての要件定義、外部、内部設計含め2ヶ月くらいかけて出来上がったのはバグありで動かないこともないウンコードの塊。定義も設計もクソで一つのコードにControllerとViewが混在している酷いものだった模様。
レビューをしてもらったら、MVC使った?と聞かれ、何それと言う状態で、調べてみたら、
MVC=Model View Controllerの略のようで、
入力時の処理、
データ加工時の処理、
描画時の処理
とそれぞれ分けて描くことで可読性と保守性その他もろもろを上げるデザインパターン(人によってはフレームワークとか・・・)とのことだとか。
そもそもそんな手法がある事を知ったのが初めてだったので、今後も必要になるだろうし、勉強がてらゲーム作りにその考えを取り込みたいなと思いながら、このゴールデンウィークに取り敢えず、ポリゴン描画してパッドでちょっと動かせるようなものを作ろうかと考えていたが、とにかく思いつかない。
MVCについて説明したスライドや、ゲームに特化したMVCについて調べた結果

M=キャラクタ情報や、マップ、ストーリ等のデータ群
V=描画処理。Modelを参照し、参照情報から必要な物を描画する
C=操作内容などから、Modelを加工する
参考:http://www.ganbarel.jp/blog/?p=1282

ということがわかったが、じゃぁそれをプログラムにしたらどういう風になるかがうまく出来ない。(C++:DirectX9)

MVCの考え方的に今までのような
一つのキャラクター(オブジェクト)クラス内に
座標、入力時の処理、描画用のポリゴンとテクスチャ情報と言う考えは絶対に間違っていると確信できるが、
それをMVCに則ったわけかたにしたらどうすればいいか・・・

そういえば前にこのサイトのAndroidプログラムで使用していた、リストによるタスク管理(GameMgr)もMVCの一つなのかなと変に考え込んだり・・・・

今後のゲーム開発、ソフトウェア開発の手法的にも重要だし、ある程度スムーズに使える程度するために質問しようにも理解しきれていないので質問内容が纏められない為、掲示板に書けない状態です・・・(だからといって自分一人でこの問題が解決できるわけでもなく・・・)

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前

Re: ゲーム制作におけるModelViewController

投稿記事 by h2so5 » 10年前

単純に分けるだけならこれでもMVCになりますよ。
► スポイラーを表示
最後に編集したユーザー h2so5 on 2015年5月05日(火) 21:10 [ 編集 1 回目 ]

YuO
記事: 947
登録日時: 14年前

RE: ゲーム制作におけるModelViewController

投稿記事 by YuO » 10年前

TOMY さんが書きました:M=キャラクタ情報や、マップ、ストーリ等のデータ群
V=描画処理。Modelを参照し、参照情報から必要な物を描画する
C=操作内容などから、Modelを加工する
これ,Controllerが肥大化する典型的なダメパターンにはまりそうです。
Modelの加工はModel自身が行います。

Controllerは,外部からの入力 (一般にはユーザー入力) を,Modelの用語に読み替えてModelに引き渡します。
キーボードとゲームパッドとタッチパネルの入力の同一視などはControllerが行うことになります。

MVCの目的はオブジェクト指向の基本的な考えである「責務の分離」を,まずは「入出力」と「それ以外」という形で分割することにあります。
そして,「それ以外」に相当する部分がMで,「入出力」にVもCも含まれます。
MVCの派生形であるMVP/PM/MVVMなども,全てこの分離 (PDS/Presentation Domain Separation) が最初にあります。

MVCの役割を簡単に書くなら,次のようになります。
  • V : 表示を受け持つ。Mを監視して,Mをプラットフォームに合わせて描画する。判断は行わない。
  • C : 入力を受け持つ。入力があったらMに知らせる
  • M : VとC以外の全ての部分を受け持つ。
図にするなら,C→M←Vという形になります。
実際には通知をObserverパターンで実装するために,M→Vという矢印が暗黙的に実装されますが,MはVを知らなくてもよいことに変わりはありません。


PDSを極限まで求めた結果としての極論を書くならば,「コンソールだろうがWindowsだろうがAndroidだろうがPS4だろうがModelは大原則として変化しない」です。
もちろん,これは極論であってかつ理想でしかなく,P側の都合である程度Modelが変化するのが当然なのですが,
あとで捨てる考えであることは片隅に覚えつつ,Modelとはそういうものだと思っておいた方が最初は分かり易いかと思います。
オフトピック
HTTPベースのようにステートレスな環境と,通常のアプリケーションのようにステートフルな環境でModelを共有出来るわけがないのです。
もちろん,無理すれば可能になりますが,無駄が非常に大きくなります。
ちなみに,単純なMVCではViewに関わるロジックを書く場所が無いため,派生形が存在します。
純粋なMVCでは数値が負なら文字を赤くするというような処理を書く場所が無いので。

ref)
開発者が知っておくべき、6つのUIアーキテクチャ・パターン - @IT
MVCモデルについて - GeekなNooblog から始まる4つの記事
など。

アバター
TOMY
記事: 53
登録日時: 13年前
住所: 愛知県
連絡を取る:

Re: ゲーム制作におけるModelViewController

投稿記事 by TOMY » 10年前

皆さん、こんな支離滅裂な日記に対して、真剣にご返事いただきありがとうございます。
MVCについて、言っている意味と何故こんな考えが生まれたのかということについてはなんとなく理解はできていたのですが、それをソースコード(若しくはソフトウェア設計)に落としこむとなると、今までMVCについて全く経験がないゆえにドツボにハマリ続けていました。
ファットコントローラ問題についてはそれについて嘆いているPHPerのブログやスライドは多々拝見していましたが、一部ではそれはそれで一つのMVCの変化の形だと言う人もおり、なにやら宗教臭がしてきたので一度切り離して考えていました。

アバター
TOMY
記事: 53
登録日時: 13年前
住所: 愛知県
連絡を取る:

Re: ゲーム制作におけるModelViewController

投稿記事 by TOMY » 10年前

何れにしても、学生時代にゲーム開発学科に在籍していたにも関わらず、設計技法やそれに伴う分割の考えについて勉強していなかった(授業がなくそんな考えがあることすら知らなかった)というのが一番の問題ですね・・・ゲームを作りたい、作ると宣言したからにはゲームAPIの技術だけではなく、もっとソフトウェア開発の手法も知っておけばと本当に後悔しております・・・

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前

Re: ゲーム制作におけるModelViewController

投稿記事 by softya(ソフト屋) » 10年前

えーと、私はMVC系はゲームには使っておりません(きっぱり)。
そもそもゲーム系で使っている人が少ないような(布教しようとしている記事/スライドは何度か見たことが)

アバター
せんちゃ
記事: 50
登録日時: 14年前

Re: ゲーム制作におけるModelViewController

投稿記事 by せんちゃ » 10年前

MVCは特に意識してませんが結果的にMVCと呼ばれる概念だったということや、~パターンというデザインパターンであったという事はよくあります。
世の中で知られているデザインパターン自体、過去のエンジニアの様々な問題に対しての解決策の一つに過ぎずそれが本質ではありません。
仕事ではMVCの概念こそ意識しても、こうでなければいけない・こう作らなければいけないという思想でクラス分けなどはしてないです。
「オブジェクトへのイベントを通知する機能を作ろう」がControllerという役割を果たしたり
「オブジェクトが攻撃状態なら攻撃モーションを再生するようにしよう」みたいなのがViewという役割を果たしたり
「オブジェクトの内部ロジックを書く場所」がModelと呼ばれたりする、という程度のノリです。

とりあえず面倒くさそうな作りにならなければいいと思います。
同じ処理を何度も記述しなくて良いように、一度作った機能は使いまわせるように、
「問題が起こってもここの処理だけ直せば良い」という程度の構造化ができているように。
まずはそういうところではないでしょうか

ISLe
記事: 2650
登録日時: 14年前

Re: ゲーム制作におけるModelViewController

投稿記事 by ISLe » 10年前

ここの質問掲示板の過去ログ検索したらわたしがウンチクたれている投稿やサンプルコードが見付かると思います。
内容の保証はありませんがさほど外したことは書いてないはず。
議論というか雑談というかそんな感じのトピックばかりでそのまま知識になるというものでもないのですが別の意味で役に立つ部分があるかもしれません。
最後に編集したユーザー ISLe on 2015年5月06日(水) 18:45 [ 編集 1 回目 ]

ISLe
記事: 2650
登録日時: 14年前

Re: ゲーム制作におけるModelViewController

投稿記事 by ISLe » 10年前

ピューの分離はわりと分かりやすいですが、コントローラーは分かりにくい。
初心者向けのサンプルコードにはまず出てこないし。
その辺は『天の声』で過去ログ検索すると関連トピックが見付かるかもしれません。
内容が分かりやすいかどうかは別として。

アバター
TOMY
記事: 53
登録日時: 13年前
住所: 愛知県
連絡を取る:

Re: ゲーム制作におけるModelViewController

投稿記事 by TOMY » 10年前

皆さんわざわざご解説有難うございます。
教えていただいたサイトなどを参考にしつつ、現在の仕事で上司の方にコードを見てもらったりと、作業をしながら現在勉強中です。返答が非常に遅くなってしまい申し訳ございませんでした。
色々とやるべきことが多いのと時間が全く足りなので日記に手を付ける暇が全くない状態でした。
本当に大変申し訳ございませんでした。

ISLe
記事: 2650
登録日時: 14年前

Re: ゲーム制作におけるModelViewController

投稿記事 by ISLe » 10年前

MVCではないですが、
TOMYさんの去年の6/1の日記に
せんちゃさんがモジュールのコントローラー化についてコメントしているのを見付けました。