Help us understand the problem. What is going on with this article?

uFrame Documentを読む(Core-Concepts)

More than 3 years have passed since last update.

https://github.com/InvertGames/uFrame.Documentation/blob/master/uFrameMVVM/pages/core-concepts.md

Core Concepts

Unityを使ってまさにUnityらしい開発をすると、小さなプロジェクトであってもクリーンなProjectを保つのは難しいです。アセットストアを使えば素晴らしいツールやアセットを自由に取り込むことができますが、それらはますます混乱を引き起こし、ますますProjectが汚れてしまいます。
uFrameはロジックを様々なカテゴリによって適切なサイズに分割することで、Projectをクリーンに保つことができます。例えばゲームにPlayer Elementがあったとしましょう。uFrameではPlayerをこんな感じで管理します。
687474703a2f2f692e696d6775722e636f6d2f53544b307650642e706e67.png

  • [ViewModel] ゲーム世界のオブジェクトそのものです。データ構造を管理し、HPや所持金,経験値等になります。
  • [Controller] 命令に従って動くゲーム/ビジネスロジックを管理します。例えばHP回復関数,所持金消費関数,経験値獲得関数等を持っています。
  • [View] ゲームに存在する音やビジュアルを表現したオブジェクトそのものです。ViewModelとバインディングします。

ViewModelControllerは"シーンの裏側"で生きています。これらは純粋なロジックだけで構成されており、シーンで何が起こっているのか知る必要はありません。Viewはゲームオブジェクトにアタッチされており、基本的にゲームデータとゲームワールドをつなぎ合わせます。ViewModelControllerが純粋なロジックを持っていて、ViewがそれらとUnityGameをつなげる役割を持っていることはuFrameの重要なコンセプトなので覚えておきましょう。

687474703a2f2f692e696d6775722e636f6d2f6f56756e4a65662e706e67.png

ViewModel,Controller,Viewの関係図
687474703a2f2f692e696d6775722e636f6d2f304d536867684d2e706e67.png

  • Controllerは、ViewModelと自分以外のControllerを知っているけどViewは知らない。
  • Viewは、絶対にControllerのことを知らない。
  • Viewは、たまに自分以外のViewのことを知っている時もあるけど、それはほとんどの場合、インタラクティブに動作するときだけ(当たり判定に関連することだったりクリックされたことだったりね)

一般的なフロー

  1. GameView: UI Buttonをクリックしたら、ExecutePlay関数が呼ばれます。
  2. GameViewModel: ExecutePlay関数の影響を受けて、GameControllerにどんなロジックを行うのか聞きに行きます。
  3. GameController: Play(gameViewModel)Commandを使って、次のようなことをします。

3-1. 新しいシーンを読み込む
3-2. 他のコマンドを実行する
3-3. AIPlayerViewModelsを作成し、gameViewModel.AIPlayersに加える
3-4. gameViewModel.StateプロパティにGameState.Playingをセットします。それが各種View要素の引き金となり、GameViewにバインディングされているCreateAIPlayersView関数が実行され、そしてそれがgameViewModel.StateプロパティにバインディングするInstantiateView(aiPlayer)ロジックを実行します( UI transitions, HUD pop-upsなどです)。

4. GameController: 実行が終わった時点でコマンドは無効になりそれ以上は何もしません。Game Logicは実行され、viewmodel プロパティは変更されるかもしれませんし、viewmodelがInstantiateされるかもしれません。すべてのトリガーはViewのバインディング次第です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away