0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ひとりアドベントカレンダーAdvent Calendar 2024

Day 17

【Unity】SMCPあれやこれやして使ってみた感想

Posted at

概要

「Unity アーキテクチャ」で検索すると、一番にこの記事が出てくる
スクリーンショット 2024-12-17 21.39.42.png

この記事では、Unityゲーム開発時のアーキテクチャパターンを示してくれている

このアーキテクチャを元に、簡単なゲームを作ってみた時のログを残しておこうと思う

実装内容

実装方針

名称未設定ファイル-ページ2.drawio.png

ViewとLogicのアセンブリを分けるためにこんな感じになった
元のSMCPからは少し変わってしまったが、構想としては同じ

  • なるべく外部ライブラリを使いたくなかったので、VContainerを使わなかった
    View, Logic, ViewLogicEvent, DataContainerそれぞれの繋ぎこみのために、GamePresenterがある
    LifetimeScopeの代わりぐらいの役割

  • ViewとLogicはViewLogicEventを経由して疎通する

  • 状態の保持をどこで行うかかなり迷ったが、DataContainerというシングルトンで管理し、Logic, Viewからの参照を許すようにした
    書き込みはLogicからだけ許可することで、ある程度変更元を絞っている(コンパイルエラーではなくルールで)

  • View以外での using UnityEngine禁止

画面遷移

名称未設定ファイル.drawio (3).png
上記画像のように3画面構成

  • Boot画面
    真っ暗な画面
    ゲームの初期化処理などを行う

  • Title画面
    タイトルロゴが表示される画面
    インゲームへ遷移するボタンのみが置かれる

  • インゲーム画面
    何かしらのインゲーム画面
    今回は簡易なテトリスを実装した(細かい部分は適当)

メッセージ

名称未設定ファイル-ページ3.drawio.png

ViewとLogicの疎通を図にしたもの
あとから考えるとOnUpdateメッセージは正直微妙だと感じた
これがあるなら、ViewからLogicへのメッセージはそれに全部のせればよくなってしまうけど、毎フレーム更新される状態はどこでDataContainerに書き込めば?となってしまった

ここの設計はかなり大事

コード

内容が公開できないため、プライベートリポジトリに変更

感想

小~中規模のプロジェクトにかなり良さそうに感じた
学習コストが安いが自由度が高すぎるため、責務を適切に分解できるレビュー者が必須

また、外部ライブラリを使わないことや, Logicをstaticにしたことで、他アーキテクチャへの引っ越しもできそう

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?