読者です 読者をやめる 読者になる 読者になる

渋谷ほととぎす通信

完全趣味でやってるUnityメモ。説明できないところを説明できるようにするための個人ブログ。昨日の自分より少しでも大きく慣れるように。。。 ※所属団体とは一切関係がありません

uFrameのコアコンセプトを読み解く : uFrame強化月間


uFrame公式Wikiを一つ一つ読み解いていきます。

そもそもuFrameとは

uFrame Game Frameworkは、MVVMパターンを採用し、uFrame専用ダイアグラムUIが特徴のゲームフレームワークです。ビジネスロジックとビューロジックを分けて記述できるところが大きいメリットだと思っています。

uFrameのコアコンセプトについて

github.com

uFrameはMVVMパターンを採用しています。
通常MVVMパターンは、

  • View
  • ViewModel
  • Model

この3つの要素で成り立っていますか、uFrameの場合、

  • View
  • ViewModel
  • Controller

と、Model部分がControllerに変わっています。

View

ViewはUnityのヒエラルキーブラウザに配置されるGameObject、すなわち、ゲーム内で使用されるViewです。

ViewModel

ViewModelはデータ構造を保持します。

Controller

Controllerは実行されたコマンドに対して、ゲームロジックを実行します。

3つの要素は以下の図のような関係性にあります。 https://camo.githubusercontent.com/3dcf8cccc1c3b2750334546eb392ad654671840f/687474703a2f2f692e696d6775722e636f6d2f3679643168744c2e706e67

ViewModelからViewに表示の更新をしたい場合

ViewViewModelとデータバインディングされています。ViewModelに定義されているデータの更新をViewは感知して表示を更新する仕組みになっています。ViewModelViewを直接操作してはいけません。データと表示部分を切り離すことがMVVMの思想だからです。
よってViewModelViewの存在を知りません。あくまでデータバインディングされているだけの状態です。

ViewからViewModelにデータの更新をかけたい場合

Viewが直接ViewModelのデータにアクセスすることはありません。この場合、VieweModelに予めコマンドを用意します。データバインディングされたそのコマンドをViewは実行するだけで、それ以上のことはしません。ViewModelはコマンドを実行されたことをControllerに通知し、どういうゲームロジックを実行するのかを確認します。Controllerは実行されたコマンドを元にゲームロジックを走らせ、ViewModelのデータを更新します。

まとめ

このように、uFrameのコンセプトは、『ゲームロジック』『データ』『表示』を切り分けることだということがわかりました。こうすることでゲーム開発をしていく中、追加機能が増えたとしてもお互いの領域を侵害せずに健全な状態を保つことができるというわけです。後から開発に入ってきたメンバーがソースを見ても理解しやすい状態になっているということでしょう。

重要なのは『ViewMoelとControllerはゲーム外に存在し、Viewがそれらとゲームをつないでいるという設計』だということです。

今回は概念だけの説明で終わりますが、別記事で具体的なソースを含めてまとめていきます。