この記事は「【UnityでAIゲーム制作】2Dヴァンサバライクゲームを作る講座」の第8回です。プログラミングいらず・画像素材も含めて生成AIでゲームを完成させます。
前回は実際に遊びながら気になったところを直したり、ゲームバランスの調整を行いヴァンサバライクの2Dゲームを完成させました。
前回の記事:

今回は、プロジェクトの中身を整理してあとから見ても分かる状態にします。ゲームは動いていますが、7回分の作業でファイルが増え「どこに何があるか」、「数値をどこで変えるか」がCodexとの会話の中にしか残っていません。これをフォルダの整理、パラメーターの管理そして仕様書という3つの形で残します。
仕様書があればゲームを改造したいときに何を変更すればいいかわかります。使用するAIが変わってもそのAIに情報を渡して開発を引継いでもらうことが可能です。もちろん、途中から人間が制作を引き継ぐ時にも役に立ちます。
ただAIに丸投げしてその後のメンテナンスや改造はできない・・・なんてことにならないようにプロジェクト整理と仕様書作成を行う方法をマスターしましょう!
現場レベルのゲーム制作が、すべてここで学べます。
今回やることを確認しよう
今回の流れは次のとおりです。
- フォルダ構成を確認して整理してもらう
- ScriptableObjectで数値を管理する仕組みを確認する
- Codexに仕様書を書いてもらう
作る作業はほとんどありません。Codexに「今どうなっているか」を書き出してもらい、それを読んで整える回です。
フォルダ構成を整理しよう
まずは、Unityプロジェクトの中身です。
今のフォルダを確認しよう
第2回で、ゲーム専用のファイルはすべて Assets/_Game/ の下に置くと決めました。今はその中がこうなっています。

| フォルダ | 入っているもの |
| Art | ドット絵、タイル、エフェクトの絵、UIの絵 |
| Audio | BGM、効果音、環境音、ライセンス文、一覧ファイル |
| Data | キャラや武器などの数値と設定(ScriptableObject) |
| Prefabs | 敵や弾、UIなど、組み立てた部品 |
| Scenes | タイトル、キャラ選択、ゲームの3画面 |
| Scripts | プログラム。役割ごとにさらにフォルダ分け |
| Resources | 起動時に読み込む素材(ロゴ、背景、フォント、音の一覧) |
| Settings | 描画パイプラインなどの設定 |
Codexが自分で整理していた
これらのフォルダは、こちらが指示して作ったものではありません。第2回のAGENTS.mdに「ゲーム固有のアセットとコードは Assets/_Game/ 配下を基本とする」と書いておいたので、Codexが作業のたびにこの決まりに沿って置いていきました。
このほかに、作業のたびに作られた Editor フォルダと、確認用のスクショや生成途中の画像がたくさん残っています。ここから整理していきます。
Editorフォルダとは?
Editor という名前のフォルダは、Unityが特別に扱うフォルダです。ここに入れたスクリプトはUnityの編集画面の中だけで動き、完成したゲームには入りません。メニューに自分用のボタンを足したり、Sceneを自動で組み立てたりする「作業用の道具」を置く場所です。
Codexは、Sceneにオブジェクトを置いたりPrefabを作ったりするとき、手で1つずつ置く代わりに「組み立ての手順をまとめたスクリプト」を書いて、それを動かして作業していました。たとえば T015MvpSetup.cs は、T-015のタスクで使うScene・Prefab・データを一度に作るためのものです。どれもUnity上部の Tools > MECHANOID RESISTANCE メニューから動かせるようになっていました。
また、追試の2回目ではTestsフォルダもできていました。こちらはUnityを自動で動かして機能テストを行うUnity Test Frameworkを動かすためのものです。
要らないものを洗い出してもらおう
まずは、消してよいものを洗い出してもらいます。ここでも「まだ消さないで」と付けるのがポイントです。
|
1 2 3 4 5 6 7 |
Assets/_Game 以下を確認して、次を洗い出してください。 - ゲームの実行に使われていないファイル(確認用のスクショ、テスト用の画像など) - 置き場所がフォルダのルールと合っていないファイル - Editorフォルダのセットアップ用スクリプトのうち、もう使わないもの 削除や移動はまだしないで、一覧と理由を出してください。 |
ゲームの各画面から実際にたどれるファイルを調べて、たどれなかったものを表にしてもらいました。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
調査のみ行い、削除・移動・変更はしていません。 Build Settings の4シーンと Resources 配下を起点に Unity の依存関係を追跡しました。非コードファイルでは400件が実行時依存に到達しませんでした。 1. ゲーム実行に使われていないファイル | 対象 | 件数 | 理由・扱い | |---|---:|---| | Screenshots | 8 | T017/T018の確認用スクショ。実行参照なし | | Art/**/QA/* | 19 | 環境・Combat・UIの検証画像 | | Art/**/Source/* | 45 | 元画像40件+prompt 5件。制作ソースであり実行には不要 | | animation.gif | 38 | アニメーション確認用 | | raw-sheet.png / sheet-transparent.png | 102 | 生成・分割工程の中間画像 | | 未使用Tile画像・Tile Asset | 101 | 現在のGameシーンでは14種類だけ使用 | (中略) | Audioのライセンス・manifest | 7 | 実行には不要だが、ライセンス記録なので削除非推奨 | |
全部で400件もありました。第4回で作ったドット絵の元画像や、コマに切り分ける前のシート、確認用のGIFなど、作る途中で生まれたファイルがほとんどです。
ライセンス文のように「ゲームでは使わないが人には必要なもの」には、Codexのほうから「削除非推奨」と注意が付いています。
チェックリストで消すものを決めよう
まず置き場所の整理とEditorスクリプトの整理は、別のタスクにしてもらいます。(400件全て見るのではなくフォルダごとチェックをつけていく形です)
|
1 2 3 |
ゲームの実行に使われていないもの・通常プレイでは使わないものに関してはチェックリストで私が削除チェック有無を入れられるものが欲しいです 置き場所がフォルダのルールと合っていないファイルとEditorフォルダのセットアップ用スクリプトのうち、もう使わないものはそのままチケットを docs/todos/ こちらに作成お願いします |
|
1 2 3 4 5 6 7 |
作成しました。 - 削除・移動・保管を記入できるチェックリスト: docs/asset-tests/asset-cleanup-checklist.md - 配置整理Todo: T-023.md - Editorセットアップ整理Todo: T-024.md チェックリストは、各項目を [x](削除)、[-](移動して保持)、[~](保管)に変更して判断を残せます。 |
できあがったチェックリストは、こんな形です(一部を抜粋)。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
確認用画像・生成中間物 - [x] Assets/_Game/Screenshots/T017/*.png(2件) - [x] Assets/_Game/Art/**/QA/*.png(19件) T016環境9件、T019 UI 7件、T020 Combat 3件。 - [~] Assets/_Game/Art/**/Source/**/*(45件) 元画像40件とprompt 5件。ゲーム実行には不要だが、再加工用の制作ソース。 - [x] Assets/_Game/Art/**/animation.gif(38件) - [~] Assets/_Game/Art/**/pipeline-meta.json(32件) 実行に不要だが削除せず移動・保管する記録 - [x] Assets/_Game/Resources/UI/T019UiManifest.json を Resources 外へ移動する。 - [-] Assets/_Game/Audio/manifest.json を制作記録用の場所へ移動する。 |
今回は、確認用の画像と中間画像は削除、ドット絵の元画像と生成のメタデータは「保管」にしました。あとで絵を直したくなったときに、元画像があると作り直しが楽だからです。
消してもらおう
チェックを付け終わったら、実行してもらいます。
|
1 2 |
asset-cleanup-checklist.md こちらチェックつけたので削除等実行をお願いします |
|
1 2 3 4 5 6 7 |
チェック済み項目を反映しました。 - 削除: 643ファイル(Unityアセットと対応.meta、QA・スクショ・中間画像・未使用Tile・旧Prefab/Wave/StageData・空フォルダ・.DS_Store) - 移動: T019UiManifest.json と audio-manifest.json を docs/asset-tests/ へ - 保存指定は維持: 制作Source 45件、pipeline-meta.json 32件、Audioライセンス6件、Fontライセンス2件 UnityのAsset Database更新を行い、削除対象の実行側参照が残っていないことを確認しました。 |
作業用のスクリプトは消してしまおう
最後に、Editorフォルダのセットアップ用スクリプトです。Codexが各回の作業で、SceneやPrefabを組み立て直すために作ったものが12個残っていました。
T-024のチケットでは「使わないものだけ消す」案でしたが、間違って実行すると今の状態が昔の構成に戻ってしまう危険があります。そこで、こちらから方針を伝えました。
|
1 |
editorのやつは先祖戻りやエラーの可能性もあるため基本は消す方向のほうがいいかと |
|
1 2 3 4 5 |
同意です。現状のように本番アセット差し替え後なら、再実行で旧構成へ戻す危険のあるセットアップスクリプトは、原則削除が安全です。 - 削除: T001、T002、T009、T015〜T023 - 維持しない理由: いずれもToolsメニューからScene・Prefab・Data・UI・Audio設定を書き換えるため、誤実行で現行状態を上書きし得る - 例外: 今後も必要な「検証だけ」の処理があれば、読み取り専用Validatorとして別途残す |
12個すべてを削除し、プログラムの中に残っていた「Toolsメニューから再実行してください」という案内文も直してもらいました。Editorフォルダごと無くなり、Assets/_Game は8つのフォルダになりました。
先祖返りとは?
先祖返りは、直したはずのものが、古い状態に戻ってしまうことです。今回のセットアップ用スクリプトは「最初の状態を組み立てる」ためのものなので、第7回で細かく直したあとに実行すると、その修正が消えてしまいます。役目を終えた道具は、残しておくより消したほうが安全です。

チェックリストは作ってもらいますが、予めAI側に推奨選択を作成してもらい、ざっと確認して実行してもらいました。
ScriptableObjectで数値を管理しよう
次に、ゲームの数値がどこにあるかを確認します。
ScriptableObjectとは?
ScriptableObjectは、数値や設定をプログラムから切り離して、Unity上で編集できるファイルにしたものです。
たとえるなら、料理のレシピカードです。「炒める」「煮る」という手順(プログラム)はそのままで、「塩は小さじ1」「10分煮る」という分量(数値)だけをカードに書いておきます。分量を変えたいときは、カードを書き換えるだけで、手順を作り直す必要はありません。

実際のファイルを見てみよう
Assets/_Game/Data/ の中には、この回の作業を終えた時点で40個のファイルがあります(AIが開発しているので読者さんによって内訳は異なります)。
| フォルダ | ファイル | 決めていること |
| Characters | Guardian、Assault、Fortress | HP、移動速度、攻撃力の倍率、初期武器、固有能力、絵 |
| Weapons | MachineGun、Missile、Laser、EnergyBlade、Drone | 威力、連射の間隔、射程、弾の絵とエフェクト |
| Abilities | Overdrive、MissileBarrage、EnergyShield | 効果時間、クールダウン、アイコン |
| Enemies | Walker、Runner、Tank、Boss | HP、攻撃力、速度、倒したときの経験値 |
| Upgrades | 15個 | レベルアップで選べる強化の内容と効果量 |
| Waves | 6個 | 何分から何分まで、どの敵が何体出るか |
| Stages | VerticalSlice | 制限時間、中ボスとボスの出現時刻、ステージの広さ(この回で追加) |
| Encounters | EliteTank | 中ボスの倍率、色、倒したときの回復(この回で追加) |
| EnemyAttacks | OverseerShot | ボスの弾の間隔、ダメージ、速さ(この回で追加) |
| (直下) | LevelTable | レベルごとに必要な経験値 |
たとえばキャラクターの設定は、プログラム側ではこう定義されていました(一部を抜粋)。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[CreateAssetMenu(fileName = "CharacterData", menuName = "Mechanoid Resistance/Character")] public sealed class CharacterData : ScriptableObject { [Header("基本ステータス")] [Tooltip("開始時の最大HP。")] [SerializeField] private float maxHP = 100f; [Tooltip("開始時の移動速度。")] [SerializeField] private float moveSpeed = 5f; [Tooltip("武器ダメージに掛ける倍率。")] [SerializeField] private float powerMultiplier = 1f; [Tooltip("武器Cooldown倍率。小さいほど攻撃が速くなります。")] [SerializeField] private float cooldownMultiplier = 1f; [Header("初期ロードアウト")] [SerializeField] private WeaponData startingWeapon; [SerializeField] private AbilityData specialAbility; ... } |
[SerializeField] が付いた項目が、Unityの画面(Inspector)で編集できる項目です。[Header] はInspectorに出る見出し、[Tooltip] はカーソルを合わせたときに出る説明です。Guardian、Assault、Fortressの3つのファイルは、この同じ型で、数値だけが違います。
見出しと説明が日本語で付いていると、Inspectorを開いたときに何の数値かすぐ分かります。英語だけで分かりにくいときは、「Inspectorの見出しと説明を日本語で付けて」と頼めば追加してくれます。
数値を変えてみよう
試しにUnity上でGuardianのHPを100から150に変えて、ゲームを再生してみてください。プログラムを1文字も直さずに、HPが変わっているはずです。
第7回で「ゲームが簡単すぎる」と調整したとき、敵のHPやウェーブの内容を変えてもらいました。あれもScriptableObjectの数値を書き換えていたので、プログラムの変更は最小限で済んでいます。


HPはキャラ選択画面ではARMORのバーとして表示されます。このあたりも詳細は人によって異なります。
残りの数値もScriptableObjectに移そう
ただし、すべての数値がScriptableObjectにあるわけではありません。たとえば第7回で決めた「制限時間5分、3分で中ボス、4分でボス」の時間は、Sceneに置いたコンポーネントに直接書かれていました。中ボスの「HP4倍、攻撃1.35倍」のような倍率も講座執筆時はプログラムの中にありました。
こうした数値をCodexに洗い出してもらいます。
今回のまとめ
今回は完成したゲームプロジェクトを後から見てもわかる状態に整えました。
まずはフォルダ構成を整理しました。Codexに使われていないファイルを洗い出してもらい、チェックリストで消すものと残すものを自分で決め、いらないファイルを削除しました。役目を終えたセットアップ用スクリプトも先祖返りを防ぐために消しています。
次に、プログラムに散らばっていた数値を洗い出してもらいチケットにしてからScriptableObjectに移しました。ScriptableObjectに移したので数値の調整がUnity Editor上で完結します。
最後に設計書とは別に、今のゲームがどう動くかを書いた仕様書をCodexに作ってもらいました。整理が終わったあとに書くので、中身が最新の状態です。「まず目次だけ」、「図解を多めに」と頼むことで、確認しながら読みやすいものにできました。
これで2Dドット絵のゲームを企画し、開発し、改善し、整理するところまで一通り終わりました。
次回からは同じ流れで3Dのゲームを作っていきます。
現場レベルのゲーム制作が、すべてここで学べます。





コメント