betrayer: 開発過程のまとめ

先日リリースした戦略シミュレーションゲームの習作「betrayer」について、記憶が新しいうちに開発過程をまとめておきます。ほとんど個人用のメモです。

おおまかには、2月からぽつぽつとゲームのことを考えたり技術調査を行ったりして、3月末から本格的な開発に入り、4月・5月はほぼ毎日開発を進めて、少し間が空いて6月末になんとか仕上げてリリースという流れでした。

2月~3月 | コミットログ

2月から3月のうち実際にゲーム作りを進めたのは3、4日程度でした。ただ、頭の中ではゲームについて色々考えていて、お手本であるDeserter's2を遊んで仕様理解を深めたり(マップの広さは?登場キャラは何人?どんなキャラがいる?UIはどんな構成?などなど)、UIはどうやって作ればいいか(uGUI vs UI Toolkitなどなど)を考えたりしていました。

2月頃: UIについての検討

UIをuGUIではなくUI Tookitを使って作ることにしました。UI Toolkitは、まだまだこなれていない感はありますが、あまりリッチなエフェクト等を必要としない、こまごまとした表示要素の多い戦略シミュレーションゲームとの相性は良かったと思います。最新のUI Toolkitの機能であるBindingが気になってUnity 2023.2で開発を始めました(結局Bindingは使わず)。開発の途中でUnity 6 Previewに移行しました。

UI ToolkitのBindingは、少しは調べたものの、(1)結局イベントの登録は(現実的に)できないのでC#側でUQueryを使って要素を取得して設定する必要があって微妙、(2)UI BuilderでのBindingの設定の操作性・生産性もそんなに良いわけではない、(3)UXMLを直接編集するのも、補完は効かないしUI Builderを触ると強制フォーマットされるのでやりづらい、という理由から使わないことにしました。

代わりにRosalinaというUI Toolkit用のコード自動生成ツールを使うことにしました。Rosalinaは、UXMLで名前をつけた要素を定義・取得するコードが書かれたクラスを自動生成してくれるツールです(Windows FormsでいうDesigner.csのようなものを作ってくれるやつです)。このツールのおかげでUI ToolkitによるUI開発の効率が大分上がりました。

参考リンク

3月末頃: 本格開始

3月末頃から本格的に開発に着手しました。どこから手を付けていいか分からないので、(Desrter's2のUIという)分かりやすいお手本のあるタイトル画面やセーブデータ画面を作ろうとしたものの、気を取り直してゲーム進行のコアの部分、各フェイズ(戦略・個人・軍事)の実装を進めていきました。

この選択は正しかったと思います。あんまり面白みのないUI作りをコツコツ進めていくよりは、なるべく早くゲームのコア部分を作って、どんなに小さくてもいいので実際にゲームが動いていくところを見ていく方が、開発のモチベーションの維持につながったと思います。

当時のメモ:

2024-03-26 火
各フェイズの実装を進められた。
戦略シミュレーションゲームの作り方が全然見当もつかなくて、今まではとりあえずUIから作ればいいかなと思ったけどこれは微妙だったかもしれない。データ構造や処理の流れをまず作っていくのが正解な気がする。なので良いスタートを切れた。

4月~5月 | コミットログ

毎日少しずつでも開発を進めるという目標を立てて開発を進めていきました。以下がGitHubの緑化状況です。

1月から6月にかけてのGitHubのContribution Graphの状況

4月初旬: マップ・各フェイズ処理の作成

OpenAIのDALL·E 3にマップ画像を作ってもらい、Tilemapを使って国を配置していきました。Tilemapを使うのは初めてでしたが、エディター機能が便利で地形や河川の情報もTilemapで配置しました。DALL·E 3に作ってもらったマップ画像もとても良くて、開発のモチベーションが上がったことを覚えています。

4月初旬頃の開発画面

4月中旬: キャラデータ作成

チャットAI(Claude 3 Opus)に人物名を100名ぐらい生成してもらってランダムに国に配置し、画像生成AI(aipicasso/emi)で色々な特徴のキャラ画像をたくさん生成して良さげな画像を各キャラに設定して能力値を調整していきました。このあたりは別の記事で詳しく紹介できればと思います。(キャラ画像生成のコード

生成したキャラ画像の例

4月下旬~5月末: 各種アクション・UI・AI実装

色々な行動のUIやAIプレーヤーの動作などをコツコツ実装していきました。

5月末時点で、Unity Editor上でなら一応なんとなくは遊べるレベルになりました。

5月末時点のゲーム画面

6月: 仕上げ・リリース | コミットログ

なんとしてでも6月中にリリースしようと思っていたので、頑張って仕上げを行っていきました。

兵士画像をAsepriteで描いて、セーブ・ロード機能を作って、こまごまとした調整・バグ修正を行って、面倒臭くて最後まで手つかずだった決戦と反乱の処理を実装して、なんとか6月末にunityroomにてリリースできました。

最後の最後、6月30日23時ぐらいになって、UI ToolkitのPanelSettingsの「PanelScale Mode」を「Scale With Screen Size」にしているのに画面解像度1920x1080と960x540では微妙に表示が違っていて、unityroom上だとレイアウト崩れが多発することが分かって慌てましたが、ギリギリ修正できました。あまりギチギチにレイアウトするのはやめようと心から思いました。

7月~現在 | コミットログ

リリース後、真面目に何度かテストプレイをしてバグを直したり調整を行ったりしました。

なんとかそれなりに遊べるものになったようで、unityroom上でクリア報告や面白いというコメントをいただけてありがたいかぎりです。(7月4日現在、unityroom上の表示はプレイ数522、評価数4、コメント数6(作者返信3つ含む)でした)

テストプレイ結果1(クリア画面)

テストプレイ結果2

(余談ですが、フリージアで統一できたらbetrayer上級者だと思います。更にノーセーブでクリアできたらめちゃすごいと思います)

今後について

リリース記事にも書きましたが、次はまた練習のために「NeoDeserter's PLUS」というゲームを真似た習作ゲーム第二弾を作ってみようと思います。このゲームも面白くて、初めて遊んだときから自分の手でこんなゲームを作りたいとずっと思っていました。また3ヶ月後の9月末のリリースを目指して頑張っていこうと思います。

一方で、後々オリジナルのゲームを作ってリリースしていくために、上記のゲーム開発と並行してbetrayerに対して多言語化対応や、ゲームパッド対応、スマホ対応を行なってみようとも思います。これらがうまく行けばitch.ioや各種ストアでも無料公開できればと思います。(とはいえ習作ゲーム第二弾の開発を優先するつもりです)

終わりに

このゲームを作りはじめたときは、戦略シミュレーションゲームの作り方なんて皆目見当もつかず、完成する見通しも全然見えない状態でした。それでもエイヤで目標を立てて6月末までにリリースすると決めて、実際になんとか達成することができてホッとしています。

毎日、たった1秒だけでもいいからPCの前に座って開発を進めようと思って、気が乗らないときも疲れたときもほぼ毎日なんとかコツコツ開発を続けてきたこと、(4月に入ってから)この3ヶ月間でゲームが一本作れなければ、一生自分はゲームを作れないという覚悟(?)をもって取り組んだこと、などが良かったのかなと思います。

まだまだ作りたいと思うゲームはたくさんあります。そして、既存のゲームを真似するだけでなく、いつか自分にしか作れないメチャクチャ面白いゲームを作ってみたいという思いもあります。そんなゲームを作るためにも、これからもまだまだ頑張っていこうと思います。

以上です。