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?

Claudeに「Populous: The Beginningっぽいのを作って」と頼んで3週間。57コミットの開発を振り返る【途中経過】

0
Posted at

はじめに

Unity MCP 経由で Claude に「Populous: The Beginning っぽいゲームを作って」と頼んだのが 9月29日。
そこから3週間、ほぼ毎日 Claude と会話しながら作り込み、タイトル画面やステージセレクト、エンディングまで入って、だいぶゲームらしくなってきました。

ゲームとしてはまだ仕上がっていません。ただ、やったことがだいぶ貯まってきたので、ここで一度振り返っておこうと思います。

最初の一発(左)と3週間後(右)

この記事では、コミット履歴を見返しながら次のことをまとめます。

  • 最初の1回のプロンプトで、どこまでできたのか
  • 3週間で何を足していったのか
  • AIに任せたこと、人間が決めたこと、AIの答えを人間が覆したこと

「生成AIでゲームを作ってみた」記事はたくさんありますが、最初の試作のその先まで作り込んでいくと何が起きるか、という途中経過の記録として読んでもらえればと思います。

数字で見る3週間

項目 数値
期間 2026/9/29 〜 10/19(約3週間)
コミット数 57
C# 55ファイル・約21,600行
シェーダー(.shader / .hlsl) 23ファイル・約3,200行
最初の一発の時点のC# 約4,700行
AIが書き続けた設計メモ(README) 696行・44章

最初の1回で約4,700行、そこから会話を重ねて約4.6倍になりました。

開発環境

用途 使ったもの
ゲームエンジン Unity 6.3 / URP
コード・シェーダー・エディタ拡張 Claude(デスクトップアプリ)+ Unity MCP
キャラクターのデザイン・三面図 ChatGPT
三面図 → 3Dモデル Tripo
部族カラーのマスク Blender(ここだけ手作業)
BGM・効果音・アニメーション Unity Asset Store で購入した素材
キャラクターのボイス VOICEVOX

Claude Code(ターミナルやエディタ拡張)は使っていません。Claude のデスクトップアプリから Unity MCP 経由で Unity エディタを操作してもらう形です。

最初の一発でできたもの

投げたプロンプトはこれだけです。

昔、PopulusTheBeginingというゲームがあったが、あんな感じの球体の惑星の上を歩き回るRTSゲームを作って欲しい。 今開いているUnityプロジェクトで自由にやりたい放題やってくれて構わない。

最初のプロンプトとClaudeの返答

ゲーム名のつづりも間違っていますが(正しくは Populous: The Beginning)、ちゃんと伝わりました。具体的な仕様は何も書いていません。「既存のゲームっぽく」と伝えるだけで、プロンプトをここまで短くできます。

Populous: The Beginning(PTB)は1998年のRTSで、丸い惑星の上でシャーマンが呪文で地形を変えながら敵の部族と戦うゲームです。題材にしたのは、平面のゲームと違って難しい要素が多いからです。

  • 地面が球体なので、「下」の向きが場所ごとに違う
  • 呪文で地形をリアルタイムに変形する
  • 球面の上で経路探索をしなければならない

正直、半分くらい動けば上出来だと思っていました。ところが、最初のコミットの時点でこれだけ動いていました。

※この時点では、BGMも効果音もまだありません(無音です)。

  • キューブスフィアで作った変形可能な惑星(Planet.cs)。重力は惑星の中心に向かう
  • 球面上のA*経路探索(PlanetNav.cs)。地形が変わると経路も引き直す
  • 呪文: 隆起・沈降・整地・稲妻・改宗・地震。敵の足元を沈めて海に落とすと溺れる
  • ブレイブが自動で木を切り、建設予定地に集まって建物を建てる
  • 敵AI: 建築・訓練・野生人の改宗・定期的な襲撃。海に陸を作って攻めてくる
  • シャーマンが倒れても、転生の地があれば15秒後に復活する

見た目は完全にプロトタイプでしたが、ゲームの骨格は最初の1回でほぼできていたと言っていいと思います。

驚いたのは、Claude が作りっぱなしにしなかったことです。返答によると、プレイヤー側もAIに任せて早送りで対戦させ、拠点づくりから戦士の訓練、襲撃、拠点の破壊まで一通り回ることを確かめていました。さらに、実際にマウスとキーボードを操作して呪文の詠唱や建築を試し、フレームレート(等速で約80FPS)まで測っています。逆に、左ドラッグでの範囲選択はうまく試せなかった、と正直に書いてありました。

3週間の歩み

コミット履歴を時期で分けると、だいたい4つの段階になりました。

時期 テーマ 主なコミット
9/29〜10/2 見た目を作る 地形と海のシェーダー、大気と空、木、キャラクターの3Dモデル、BGM・効果音、HUD、竪穴住居、建物を避けて歩く
10/6〜10/11 ゲームの形にする 部族カラー、ウォリアー、惑星エディター、ステージ2、タイトル・リザルト・エンディング、ステージセレクト
10/12〜10/15 本家に寄せる 呪文とマナの仕様、ストーンヘッド、石の寺院、伝道師、壁画風のUI
10/16〜10/19 仕上げ ブラスト、呪文のエフェクト、ボイス、祈りのアニメ、exe化の不具合修正

見た目:テクスチャ画像ゼロの地形と海

最初に頼んだのは、画面の大半を占める地面と海でした。Claude が出してきたのはテクスチャ画像を1枚も使わず、シェーダーの中でノイズを計算して質感を作る方法です。岸辺の泡、波、深さで変わる海の色まで、すべて数式で描いています。

ゲーム中に F3 を押すと改善前と改善後を切り替えられるようにしてくれたので、比べながら調整できました。

ゲームの形:惑星エディターとステージ

遊べる形にするには、ステージを作る手段が必要です。そこで、Claude に惑星を編集するUnityエディタ拡張を作ってもらいました。地形を盛ったり削ったり、木や建物を置いたりして保存すると、そのままゲームで遊べます。

タイトル画面、ステージセレクト(宇宙に浮かぶ惑星を選ぶ画面)、リザルト、エンディング、セーブとロードもこの時期に入りました。

本家に寄せる:ストーンヘッドと呪文

PTBらしさの核は、ストーンヘッド(巨大な石の頭像)に信者を祈らせて新しい呪文を授かる仕組みです。祈りを途中でやめるとメーターが下がる、戦士も祈りに参加できる、正面から祈る、といった細かい仕様を会話しながら決めていきました。

ストーンヘッドに祈る信者たち

人間が決めたこと、AIの答えを覆したこと

この記事で一番書きたかったのはここです。コードはほぼすべて Claude が書いていますが、何を作るか、どこで止めるかは毎回人間が決めていました。

1. 物理的に正しい空を捨てた

空と大気を頼んだら、Claude はレイリー散乱とミー散乱を1ピクセルごとに計算する、物理的に正しい空を作ってきました。青空も、地平線の明るさも、惑星の縁の光の輪も、夕焼けも、すべて1つの物理式から出てくる立派なものです。

でも、ゲーム画面としては何かしっくりきませんでした。

そこで「厳密じゃなくていい。普通に青い空と白い雲があればいい」と伝え、天頂の色、地平線の色、かすみの色を直接指定して混ぜるだけの見た目重視版に作り直してもらいました。最終的には、カメラを包む巨大な球の内側に青空を塗るスカイドームに落ち着いています。

AIは「正しいもの」を作るのが得意です。ただ、ゲームに必要なのは正しさより「それっぽさ」です。この線を引くのは人間の仕事だと感じました。

2. 世界観を「ポップ」から「荒涼」に振り直した

最初のキャラクターと地面は、トイ調のポップな見た目でした。それはそれで可愛かったのですが、PTBの原始的で荒々しい世界とは違います。

そこで、地面を荒れ地に、海を暗く濁った色に、キャラクターを汚した版に、光の当て方も含めて見た目を全部作り直しました。

ポップ版(上)と荒涼版(下)

3. 「敵と味方の見分けがつかない」は手で直した

荒涼とした見た目にしたら、今度は敵と味方の見分けがつかなくなりました。最初は、テクスチャの青い部分を色相で判定して塗り替える自動マスクで対応していましたが、汚した版の服ではうまく拾えません。

ここだけは自分で Blender のテクスチャペイントで服の部分を白く塗ったマスク画像を作り、Claude にそれを読み込む仕組みを作ってもらいました。AIに全部任せるより、人間が5分塗ったほうが早くて確実な場面もあります。

4. 手触りの違和感は、人間にしか気づけない

コミット履歴を見返すと、細かい違和感を直す指示がたくさんあります。

  • 村人が家に引っかかって立ち往生する → 建物を障害物として避けて歩くように
  • 建物の壁をすり抜けて出入りする → 出入り口を通るように
  • ストーンヘッドの横や後ろから祈っている → 正面から祈るように
  • シャーマンがそっぽを向いたまま呪文を唱える → 狙った方向を向くように

どれも、遊んでみて初めて「なんか変だ」と気づくものです。Claude はこれを言われればすぐに直してくれます。ただ、気づくのは人間の役割でした。

5. 検証を途中で打ち切った

途中で、Unity公式のプラグインを入れた場合と入れない場合でブラスト(爆発の呪文)の実装を比べる実験もしました。ただ、当初やりたかった比較にはならなかったので、そこで打ち切ってプラグインなし版を採用しています。

試してみて意味がないと分かったら、深追いせずに戻る。これも、AIと開発するときに人間が持っておくべき判断だと思います。

ただ、プラグインを入れたこと自体は無駄になりませんでした。後で書くように、それまでの成果物を見直してもらう中で、ビルド時の問題を先回りして見つけられたからです。

生成AIでキャラクターと声を作る

キャラクター:ChatGPT → Tripo → Claude

キャラクターは3つの生成AIをリレーして作りました。

  1. ChatGPT でデザイン案を出す
  2. ChatGPT で三面図にする
  3. Tripo で三面図から3Dモデル化(リトポロジー、人型リグ、FBX出力)
  4. FBX を Unity に置き、Claude が取り込んでアニメーションと部族カラーを設定

原始戦士ブレイブ キャラクター設定画

Brave Before/After

Shaman Before/After

この記事を書くためにコードを見返していて、驚いたことがあります。知らないうちに、AIが作ったモデルの不具合をAIが直していたのです。

Tripo の自動リグは、シャーマンの大きな帽子のつばを、肩や腕の骨にも結び付けてしまうことがあります。そのままだと、腕を上げたときに帽子が引っ張られて崩れます。

Claude は、モデルを取り込んだのと同じコミットで HeadFix.cs というクラスを書いていました。首の付け根より少し上から頭にかけて、頂点が動く骨をなめらかに頭の骨へ付け替える処理です。ログを見ると、シャーマンの頂点 17,021 個のうち 5,111 個を付け替えています。

// 首〜あごの高さで、なめらかに頭の骨へ付け替える
float t = Mathf.InverseLerp(lo, hiT, Vector3.Dot(verts[i], up));
if (t <= 0f) continue;
t = t * t * (3f - 2f * t);   // smoothstep
w[i] = Blend(w[i], hi, t);

私は帽子が崩れたことに気づいてすらいませんでした。コミットメッセージにも書かれていません。どうやって気づいたのかまでは分かりませんが、おそらくキャラクターを近くで撮影して確認する仕組みを使って、自分で見つけたのだと思います。頼んだことだけでなく、頼んでいない品質まで面倒を見てくれていたわけです。

斧や杖を握らせるときも、道具のメッシュから柄の向きと握る位置を計算して、手の骨に合わせて持たせています。

声:VOICEVOX でまとめて生成

ユニットの声は VOICEVOX で作りました。Claude に頼んで、CSVの台本からまとめて音声を作る PowerShell のツールを用意しています。

  • units.csv: ユニットごとの声(話者・高さ・速さ・抑揚)
  • presets.csv: 話し方のプリセット(問いかけ、命令、絶叫、瀕死、お経…)
  • lines.csv: 台本(ユニット、種類、セリフ)

1行につき、高さや長さを少しずつ変えたバリエーションを作るので、同じセリフの繰り返しが機械的に聞こえにくくなっています。

先回りしたところ、ハマったところ

「exe にするとピンクになるかもしれない」とClaudeが先に気づいた

Claude デスクトップアプリに Unity 公式のプラグインを入れたとき、ひとつ検証をしました。プラグインを入れる前に作ったものを Claude に見直してもらい、まだ表に出ていない問題に気づけるかを試したのです。

その見直しの中で出てきたのが、「このままビルドすると、地形や海、空がピンクになる可能性があります」という指摘でした。

理由はこうです。コードから Shader.Find("PlanetRTS/Terrain") のように名前だけで探しているシェーダーは、マテリアルから参照されていないと、ビルドのときに不要なものとして削られてしまいます。エディタ上では問題なく動くので、ビルドするまで気づけません。

実際にピンクになったのを確認したわけではありません。でも、筋の通った指摘だったので、先回りして直してもらいました。実行時に使うシェーダーへの参照をアセットにまとめ、ビルドの直前に自動で更新する仕組みです。

// Shader.Find の代わりに、ビルドに必ず含まれるアセットから探す
var shader = ShaderLib.Find("PlanetRTS/Terrain");

生成AIに任せていると、エディタ上で動くことしか確かめていない状態になりがちです。作ったものをあとからAIにレビューさせると、まだ起きていない問題を拾ってくれることがあります。作らせるだけでなく、見直させる使い方も有効だと分かりました。

振り返り:AIと3週間作って分かったこと

任せてうまくいったこと

  • 球面の経路探索や地形変形のような、アルゴリズムとして難しい部分
  • テクスチャを使わないシェーダー、木のメッシュのプロシージャル生成
  • エディタ拡張、データの取り込み、ビルド設定など周辺の仕組み作り
  • 3Dモデルの不具合の補正のような、地味だけど面倒な作業

人間がやるべきだったこと

  • 世界観と方向性を決める(ポップか荒涼か)
  • 「正しいけど面白くない」を見抜いて止める
  • 遊んで違和感に気づく
  • 試したことを打ち切る判断

やってよかった工夫

READMEをAIに書かせ続けたこと。 機能を足すたびに、仕組みと調整箇所を README に追記してもらいました。最終的に696行・44章の設計メモになり、会話が変わっても Claude が過去の経緯を読み直して作業を続けられました。

AIが自分で確認できる仕組みを作ってもらったこと。 コンパイル結果やログをファイルに書き出す仕組みと、特定の場面にカメラを寄せてスクリーンショットを撮るデバッグコマンドを用意してもらいました。たとえば blasttest を実行すると、爆発の瞬間から0.05秒後、0.3秒後…と連続で画像を撮ります。これで Claude が自分で結果を見て直すループが回るようになり、私が毎回確認しなくても済む場面が増えました。

細かくコミットしたこと。 57コミットの履歴が、そのまま開発の記録になりました。この記事も、コミット履歴とXに投稿した開発ログを材料に書いています。

おわりに

仕様が Populous: The Beginning そのままなので、このゲームを販売する予定はありません。あくまで、生成AIでどこまで意図どおりにゲームを作り込めるかを試す実験です。

ここまで3週間やってみての感想は、「AIはびっくりするほど作れる。でも、何を作るかを決め続けるのは人間」です。

ゲームとしてはまだ途中なので、作り込みはこれからも続けます。いつかは itch.io などで、無料で遊べる形で公開したいと考えています。区切りがついたら、また振り返り記事を書くつもりです。

次は、ファミコンの名作を1回のプロンプトでどこまで再現できるかを試しています。第1弾はパックマンです。

開発の様子は X で「PTB風RTS 開発ログ」として毎日投稿しています。続きが気になる方はぜひフォローしてください。

■ 音声
Brave : VOICEVOX:玄野武宏(CV:ガロ)
Warrior : VOICEVOX:剣崎雌雄
Preacher : VOICEVOX:麒ヶ島宗麟(CV:レオブラック)
Shaman : VOICEVOX:冥鳴ひまり

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?