原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【Unity】公式サンプルプロジェクトから学ぶデザインパターン:MVP

PS5

とっくの昔に忘れていたAmazonの招待リクエストに当選していまい年末の金欠の中でPS5を購入した皆さんこんにちは。「せっかく(当選したの)だから」と貯金をはたいて購入しましたが、PS4と比べてグラフィック性能がアップした実感は未だ感じていません。あとデカい。想像以上にデカくて置き場に困ります。これから購入される方はちゃんと置き場を確保してから購入した方が良いでしょう。

 

福岡インディーゲームエクスポ

前回の記事でも紹介通り、12/17に福岡でインディーゲームの展示イベント「福岡インディーゲームエクスポ」が開催されました。

www.fukuoka-indiegame.com

当日は生憎の雨模様で、かつ真冬日だったのですが、それでも会場はお客さんが多くてほとんどのゲームの試遊が順番待ちの状態でした。

スマホ向けのハイパーカジュアルからPC向けの本格的なアクション、ストラテジーゲームまで幅広いゲームが展示されており、私もできるだけ多くのブースを回って試遊したのですが、人の列が全然途切れなかった為プレイできなかったゲームも幾つかありました。

出展者の方も試遊している私の横で熱心にゲームの説明をして下さる方から、全くリアクションの無い方まで様々でしたが地元の福岡でもインディーゲーム界隈が盛り上がっていることを感じられてとても有意義なイベントだったと思います。
もし来年も開催されるなら今度は出展者として参加したいですね。

 

最終回

長らく続けてきたデザインパターンに関する連載も今回で最終回です。

github.com

www.karvan1230.com

www.karvan1230.com

www.karvan1230.com

www.karvan1230.com

www.karvan1230.com

www.karvan1230.com

www.karvan1230.com

 

MVPパターン

MVPパターンとは、システムの処理をロジック(Model)、表示(View)、中継(Presenter)という役割にそれぞれ分割して実装する設計思想のことを指します。

同じようなパターンでMVCやらMVVMといったものもありますが、これらはデータの流れやアクションの呼び出し方が異なるぐらいで、表示とビジネスロジックを分離してそれぞれが役割を受け持つ設計思想の根本はMVPパターンと同じです。
このパターンは業務系のシステムでは広く用いられていて、このパターンをベースにした独自のフレームワークによる開発案件も多く見かけます。

例えば、とある商品の販売に関してお客の要望に応じたカスタマイズを行う場合、商品の概要説明をお客向けに行う販売担当者(View)はお客からの要望をあずかると、本社の管理部(Presenter)にその要望を伝えます。
管理部(Presenter)は商品設計を行っている設計者(Model)に連絡し、設計者(Model)はその要望を取り入れてカスタマイズした結果を管理部(Presenter)に返信。
管理部(Presenter)はカスタマイズ内容を販売担当者(View)に伝え、販売担当者(View)はそれを受けて再度お客に向けてカスタマイズされた商品の説明を行います。

ここで重要なことは販売担当者(View)と設計者(Model)は互いの存在を認識せず、それぞれの仕事に注力しているという点です。
また管理部(Presenter)は間を取り持ちますが、取り持つだけで独自の判断やロジックを持ちません。
つまりそれぞれ互い(View,Model,Presenter)のコンポーネントは疎結合状態となっており、これによりテスト容易性や可読性が向上されていると言えます。

 

サンプルシーン

このデザインパターンのサンプルシーンを実行すると以下のような動作が見られます。

画面中央の的に対してクリックすると、それに応じて下のメーターが短くなっていきます。リセットボタンをクリックすると元に戻ります。
メーターの長さは内部で保持しているHealth値に応じて決まり、Health値が大きいほど長く、小さいほど短くなります。

このシーンのシステムを先程のMVPパターンに当てはめてみると

  • View:クリックイベントの受信、メーターの表示更新
  • Model:Health値の増減処理
  • Presenter:ViewとModelの間を取り持つ

上記のような役割分担となります。

一般的なシステムの場合、View、Model、Presenterはそれぞれでクラスを作成しますが、このシーンではメーターにはUnity標準のSliderコンポーネントを使用しており、メーターの表示更新はPresenter役のHealthPresenterクラス内でSliderコンポーネントにHealth値を直接渡すことで行われているので、標準的なMVPパターンとは少し実装方法のイメージが異なると思います。

サンプルシーン内の各クラスの役割と処理の流れを以下に記します。

 

まとめ

MVPパターンとはシステムの処理を「ロジック(Model)、表示(View)、中継(Presenter)」という役割に分割するパターンです。

これによりテスト容易性や可読性が向上されます。

ただ、Unityでこのパターンを採用する必要性はそこまで・・・
(基本的にスクリプトはMonoBehaviourを継承してオブジェクトにアッタチする形式なので、ViewとPresenterに分ける必要がない)

 

最後に

デザインパターンとはオブジェクト指向のプログラミング言語を採用するシステムにおいて品質や開発効率を高めることを目的として考案された設計思想です。

昨今ではあまり必須というわけでもありませんが、基礎的な知識として学んでおくことは損になりません。
公式のサンプルプロジェクトを通じて各種デザインパターンの具体的な内容とUnityでの採用例を学習することができました。
ネット上では各デザインパターンについて色々な解説を読むことができますが、実際に適用されたシーンを触ることはそれよりも学習効果が大きいのではないでしょうか。

もし、この掲載を通じてUnityによるゲーム設計のスキル向上に繋がっていれば幸いです。長い連載でしたがお付き合いありがとうございました。

 

丁度切りが良いので今年のブログ更新は今回で最後にします。
年明けからは通常の内容で更新しますので、来年もよろしくお願いします。

 

それでは良いお年を!

来年こそはゲームをリリースするぞ!

 

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。