概要
「Unity アーキテクチャ」で検索すると、一番にこの記事が出てくる
この記事では、Unityゲーム開発時のアーキテクチャパターンを示してくれている
このアーキテクチャを元に、簡単なゲームを作ってみた時のログを残しておこうと思う
実装内容
実装方針
ViewとLogicのアセンブリを分けるためにこんな感じになった
元のSMCPからは少し変わってしまったが、構想としては同じ
-
なるべく外部ライブラリを使いたくなかったので、VContainerを使わなかった
View, Logic, ViewLogicEvent, DataContainerそれぞれの繋ぎこみのために、GamePresenterがある
LifetimeScopeの代わりぐらいの役割 -
ViewとLogicはViewLogicEventを経由して疎通する
-
状態の保持をどこで行うかかなり迷ったが、DataContainerというシングルトンで管理し、Logic, Viewからの参照を許すようにした
書き込みはLogicからだけ許可することで、ある程度変更元を絞っている(コンパイルエラーではなくルールで) -
View以外での
using UnityEngine
禁止
画面遷移
-
Boot画面
真っ暗な画面
ゲームの初期化処理などを行う -
Title画面
タイトルロゴが表示される画面
インゲームへ遷移するボタンのみが置かれる -
インゲーム画面
何かしらのインゲーム画面
今回は簡易なテトリスを実装した(細かい部分は適当)
メッセージ
ViewとLogicの疎通を図にしたもの
あとから考えるとOnUpdateメッセージは正直微妙だと感じた
これがあるなら、ViewからLogicへのメッセージはそれに全部のせればよくなってしまうけど、毎フレーム更新される状態はどこでDataContainerに書き込めば?となってしまった
ここの設計はかなり大事
コード
内容が公開できないため、プライベートリポジトリに変更
感想
小~中規模のプロジェクトにかなり良さそうに感じた
学習コストが安いが自由度が高すぎるため、責務を適切に分解できるレビュー者が必須
また、外部ライブラリを使わないことや, Logicをstaticにしたことで、他アーキテクチャへの引っ越しもできそう