用Grok和Unity Hub开发2D回合制RPG的实践:从失败到成功的工作流
【Unity × バイブコーディング】「ドラクエ風を作りたい」とだけ言ったら横スクロールになった話
はじめに
先日、熊本市内で行われたクリエイティブハンズオンに参加し、UnityとAIを活用したゲーム制作(バイブコーディング) を学ぶ貴重な機会をいただきました。
「自然言語で対話しながらゲームが形になっていく」という開発体験に感動し、帰宅後すぐに自分でもゲーム制作に着手。……したのですが、ここで「教わっていない余計なこと」を試したくなるいつもの悪癖が発動しました。
本記事では、曖昧なプロンプトで撃沈した失敗談から、要件定義・ステート設計・アセット命名規則をAIに渡して狙い通りの2Dターン制RPGを組み上げた実践プロセスをまとめます。
1. 最初の失敗:「ドラクエ風」はAIに伝わらない
最初は「モデルを変えたらビジュアルのクオリティが上がるのでは?」という短絡的な思いつきからCodexを試し、Unity Hubと接続して勢いよくこう投げました。
「ドラクエ風のRPGを作りたい」
結果、生成されたのはなぜか「横スクロール風WorldマップなしRPG」。
ドラクエといえば上見下ろし(トップダウン)視点のグリッド移動&コマンドバトルですが、AIにとって「ドラクエ風」という言葉だけでは解釈のブレが大きすぎたのです。
さらに、今回はちょっとエッジの効いた設定(少しセンシティブな服ビリ差分や耽美なBL要素)を含めたかったため、「Grokならある程度のセンシティブなニュアンスも受け止めてくれるのでは?」とひらめき、環境を整えてリベンジすることにしました。
2. リベンジ:要件定義書レベルのプロンプトを投げる
前回の反省から、「AIに作らせるなら、人間側の世界観とシステム仕様を言語化して渡す」 というバイブコーディングの基本に立ち返りました。
実際にGrok / Unity Hub連携に投げた初期プロンプトがこちらです。
Unity Hubに接続して、ドラクエ風の2Dターン制RPGを作成してください。
【ゲーム概要】
ネオトーキョーで人気の3人組男性バンドのボーカル・優(19歳)が、ステージ上から忽然と消える。
バンドメンバーであり恋人の御堂と楊は絶望に陥る。
優はボス・ファントムの元から逃げ出し、ネオトーキョーへ戻ろうとするが、
優を自分のものにしたいファントムに妨害されるBLRPG。
【開始フロー】
1. オープニング動画再生:opening.mp4
2. 動画終了後、ゲーム画面へ遷移
3. 優がファントムの拠点から脱出した状態でスタート
【マップ構成】
ワールドマップ+各エリアのローカルマップで構成。
- 砂漠の国(ファントムの拠点あり・スタートエリア)
- 珈琲国(安藤がいる)
- 氷結国(催眠が得意な龍がいる)
- ネオトーキョー
- 絶望の島
【主要キャラクター(立ち絵あり)】
- 優:you.png(ベース衣装。ボスの趣味で着せられたもの)
- 御堂:mido_anger.png
- 楊:yang_anger.png
- ファントム:boss.png(顔は見えない)
- 龍:dragon.png
- 安藤:ando.png
- 服を狙う敵:Enemy.png
- 防具屋:armor.png
- 服が気になる街の人:mob.png
立ち絵があるキャラクター・敵は専用会話UIで表示。
それ以外の人物は簡易NPC(テキストのみ)で対応。
【コアシステム】
- 探索中・戦闘中に「服を狙う敵」が出現する。
- 優の服装はダメージを受けるごとに変化する(cloth0〜cloth3の4段階)。
- cloth0:無傷
- cloth1:軽度
- cloth2:中度
- cloth3:重度
- 修復方法:
1. 宿屋で休む(全回復)
2. 防具屋で裁縫道具を購入し、メニューから「縫う」を選択(1段階修復)
- 敵に敗北すると、ファントムの元(砂漠の国の拠点付近)に強制送還される。
- ファントムのセリフは「服の破損段階(cloth0-3)」と「帰還回数」によって変化させる。
【ファイル命名規則(優の立ち絵)】
You_cloth[0-3]_ret[帰還回数].png
例:You_cloth1_ret0.png、Yu_cloth2_ret3.png
まずは以下の最小構成でプロトタイプを作成してください:
1. ワールドマップから砂漠の国へ移動できる
2. 砂漠の国に簡易な街(宿屋・防具屋)とフィールドがある
3. 服ダメージ段階の変数と、簡易的な「縫う」コマンド
4. 敗北時にファントムの元へ送還される処理
5. 立ち絵を表示する基本的な会話システム
使用する画像は指定のファイル名でAssetsに配置する前提で進めてください。
3. 実装の工夫と設計ポイント
① ファイル命名規則を「状態変数」と1対1で一致させる
服の破損と敗北帰還回数によって立ち絵を動的に切り替えるため、アセット名を明確にルール化しました。
You_cloth0_ret0.png // 無傷・初帰還
You_cloth0_ret1.png
You_cloth1_ret0.png // 軽度・初帰還
You_cloth1_ret2.png
You_cloth2_ret0.png // 中度・初帰還
You_cloth2_ret1.png
You_cloth2_ret3.png
You_cloth3_ret0.png // 重度・初帰還
You_cloth3_ret2.png
You_cloth3_ret5.png
この命名規則をあらかじめ伝えておくことで、C#スクリプト側で $"You_cloth{cloth}_ret{returnCount}" のように文字列補間だけでリソースをロードできるコードが一発で生成されました。
② 戦闘システムと衣装破損ステートの連携
次に戦闘機能を追加する際、以下のようにプロンプトを重ねました。
「簡易的なターン制戦闘を追加してください。敵は服を狙う敵(Enemy.png)を中心に、戦闘でダメージを受けると優のcloth段階が上昇するようにしてください。敗北時はファントムの元へ送還されます。」
これにより、通常のHPダメージ計算とは別に、服の耐久度が減少し立ち絵が切り替わる処理(ClothSystem)が綺麗に分離・実装されました。
// 実際に生成・整理された服ダメージと敗北帰還のロジック例
public static class ClothSystem
{
public static bool ApplyEnemyClothHit(GameState state)
{
if (state.Cloth >= GameBalance.MaxCloth)
return false;
state.Cloth++;
return true;
}
public static string ApplyDefeat(GameState state)
{
state.ReturnCount++;
state.Hp = state.MaxHp; // 生かされて連れ戻されるためHPは回復
state.Screen = ScreenId.DesertTown;
// 服の破れ段階と累計帰還回数に応じたボスのセリフを返す
return PhantomLines.Line(state.Cloth, state.ReturnCount);
}
}
③ 修復ギミック(「宿屋」と「道具屋+縫うコマンド」)
服が破れていると進行不能になるイベントやNPCの特殊反応を作りたかったため、修復手段も2系統用意しました。
- 宿屋:お金を払って泊まるとHP全快+服も完全修復
- 道具屋の裁縫道具:道具屋で「裁縫道具」を購入しておくと、メニュー画面に「縫う」コマンドが追加され、フィールド上で1段階ずつ応急手当が可能
ただ指示通りに作るだけでなく、「服の状態によってメニューの選択肢を出し分ける」「催眠状態のときは針先が滑って失敗することがある」といった少し凝ったロジックまでAIとキャッチボールしながら肉付けしていきました。
4. 画面への組み込みと「人間側の最後の仕上げ」
生成されたスクリプトをUnityのシーンにアタッチし、立ち絵やタイルマップを配置した様子がこちらです。
一通りのコードが組み上がった後、最後に人間が手を加えたのは以下の点でした:
-
セリフの人間味の調整
AIが初手で書いたセリフは少々説明口調で「AIっぽさ」が残っていたため、キャラクターの口調や切迫感に合わせてリライト。 -
イベントごとの立ち絵差分の差し込みタイミング調整
「どのタイミングでどの表情/破損度の立ち絵を出すか」という演出面の間(ま)の調整。
この「骨組みとロジックはAIに猛スピードで組ませ、ディテールや演出の味付けを人間が担当する」というワークフローが非常に心地よく機能しました。
まとめ:バイブコーディングで学んだこと
-
「〇〇風」のひとこと発注は事故のもと
ジャンル名や有名タイトル名だけで発注すると、AIの解釈次第で横スクロールにも見下ろし型にもブレてしまいます。「2Dターン制」「上見下ろしグリッド」「コマンド選択式」など、ゲーム性のコアとなる要素は具体的に指定するのが必須です。 -
アセットの命名規則は最初に握る
プログラムとイラスト(立ち絵)を連動させる場合、名前_ステートA_ステートB.pngのような命名規則をプロンプト側から先に提示すると、スクリプトのロード処理が極めてシンプルになります。 -
最小構成(MVP)から少しずつ対話で肉付けする
最初から完成形を一撃で作らせようとせず、「移動と会話」→「服破損と帰還」→「戦闘と修復」と段階を踏んで対話することで、破綻なく動くゲームを最短距離で形にできました。
Unityでのゲーム開発に二の足を踏んでいた方も、AIとの対話ベースなら驚くほど速くアイデアを形にできます。気になっている方はぜひチャレンジしてみてください!
使用ツール
Grok build,unity HUB
来源:Qiita · Unity 开发社区 · qiita.com

