見出し画像

Game A Week 振り返り (2024.10.20〆 異世界見聞録 巻1)

毎週ゲームを作る、Game A Weekの振り返り記事です!


作ったやつ


今回の狙い

今回からお題無し。
試してみたかったネタの内、「地図を埋める」というものがあり、
シヴィライゼーションをやっていて、ただ地図を埋めるだけでもそこそこ面白いのでは? と感じたので、この方向で行くことにした。

プログラミング的には、前の振り返り記事に書いた、
・MVVMデザインパターンをしっかり使う
・前回作った便利関数や機能を使いまわす
・新しいゲームを作るにあたってのベースとなるプロジェクトファイルを作る、ドキュメントを用意する
をやることが狙い。


ゲーム全体

まず、期限超過しすぎ…。
パンデチカのイベント出展が2回あったが、それにしてもかけすぎている。
30時間くらい作業していたらしい。
実装面で大分沼に嵌ったが、もっと細かく見返せるように、作業時間の内訳をしっかり書こう。

内容に関して、
テキストをいっぱい書いた割には、そこで魅力を出せなかった。
シヴィライゼーションだと、発見したときに『グレートバリアリーフ』とか、我々が知っている偉大なブツが出てくるので良くて、
フィクションの場合は、まずコアとなる造語を少数説明し、その上でそれに紐づく形で広げていかないといけないと思う。

あと、魅力という意味でも、分かりやすさという意味でも、地図画面は入れないといけなかった。
行ってない街の上に何か出すのも。

アート的なところはかなり簡素で、タイルマップも、上下左右のつなぎなどを考えていない。
が、文字によって地図感は最低限出たと思う。

プログラミング

MVPパターン

まずMVVMではなくMVPパターンでやった。
Unity6以前でDataBindingをどうやるのか分からなかったため。

・Model層、View層、Presenter層の切り分け自体は上手くできたと思う。
ただ、ModelのIObservableに購読させることの徹底はできていなかった
・Modelに購読させたViewの動き(移動)などを待つ際に、UniTaskを返すことができないので、PresenterからViewを監視する形になったのは、もう少しなんとかならないのか。
・一つのModelやViewに、一つのPresenterを用意しようという気があまり無かった。結果、購読させるときに面倒が発生した。
・購読されてないModelのIObservableを呼ばれた時にアサーションを出したい。今後購読をちゃんとやっていくと結構起こるはず
・IObservableを引数無しで渡すときはどうすればいいのか? nullでもいいobject型の引数を用意して無理くりやったが…


・前回作った便利関数や機能を使いまわす
・新しいゲームを作るにあたってのベースとなるプロジェクトファイルを作る、ドキュメントを用意する

サウンド周りや、テキスト周りは切り分けて、ベースのプロジェクトファイルを作れた。(ドキュメントは怪しい)
切り分けたのを便利に使えたので良かったと思う。
gitのテンプレートプロジェクト、lfsが使えないのはどうにかならんのか…

・DI周り

・DIと、その他の初期化は分けた方が良かった。
・Stateを変えたいクラスと、Stateとの間で、循環参照が発生してしまった。
 結局StateContainerをFactoryから吐くようにしたのだが、それを色々なクラスで使うのが面倒だった。
 Zenjectや他のツールでのMethodInjectionでどうにかならないものか。
・同じinterfaceを複数のクラスが実装しているとき、そのinterfaceに関するInjectionをどうするか問題。
 一々Factoryを作るのは面倒なので、DIでどうにかしたいが、Zenjectにその機能はなさそう? もう少し調べてみてもいいか。

enum,Const周り

・各種ステートなど、enumで持たせるべきなのか、どこに持たせるべきなのかなどが不明。
 解放閉鎖の原則を考えると、state追加のときにenumには変更が入ってしまうため、追加されたstateと同じアセンブリにしたいが…。ConstやPresenter辺りに持たすと、それは無理。
 ゲーム開発的には、自分で作ったアセンブリをいじれないということはあまりないと思うので、妥協してもよいか。

その他

・プログラムを書く上での便利ツールをもっと導入したい。
 Visual Studioだと、テンプレート編集できないのが大変不便。
・StateやMoverなど、一つのinterfaceを複数のクラスが実装していて、かつそのクラス間での共通部分が多い場合どうするか。
 Utilityなどに出しつつ、抽象クラス使用を試してみたい。

次回に向けて

引き続きプログラミングの課題に向き合って進めていきたい。
・購読を意識してMVPデザインパターン使う
・今回作った便利関数や機能を使いまわす
・便利ツール導入する
・抽象クラス使ってみる
・Zenjectの機能使う
あたり。


いいなと思ったら応援しよう!