こんにちは。勉強会やゲームジャムの運営を社内でやっている NARI です。
今回の社内 Advent Calendar の企画・進行も担当しています。
……と言いつつ、今回はガチガチの技術記事ではありません。
初日の Advent Calendar 記事なのにすみません。でもそのぶん、後続の執筆ハードルを思いきり下げるつもりで書いています。
「ふ~ん、そんな感じなんだ」くらいの気持ちで、肩の力を抜いて読んでもらえたらうれしいです。
今回の企画意図

Nano Banana Proで作ってもらったそれっぽいサムネイル
最近、Unity 周辺のエディタ効率化ツールやAI コーディングツールが爆速で増えていますが、
「結局、どのツールがどこまでやってくれるの?」
というのは、結局 触ってみないと分からない ですよね。
そこで今回は、
UnityMCP × AI Agent
をテーマに、
- Cursor
- Antigravity
この 2 つを 同じ Unity タスクで動かして比較検証 してみました。
どちらも個人で Pro 版を契約して使っています。
目的はシンプルで、
Unity で AI エージェントはどこまで実務レベルの作業を肩代わりできるのか?
UnityMCP を組み合わせるとワークフローはどう変わるのか?
これをなるべく具体的に可視化していく、という企画です。
検証対象 AI ツールのざっくり紹介
UnityMCP(Unity Model Context Protocol)
Unity エディタと AI エージェントをつなぐ新しい仕組みです。
プロジェクト情報を AI に渡し、AI が コード修正・アセット作成・設定変更 などを自動で行えるようになります。
以下のリポジトリパッケージを使用しました。
https://github.com/CoplayDev/unity-mcp
ざっくり言うと、AI エージェント側から以下のような操作が可能です。
(長いので details タグで折りたたんでいます)
UnityMCP でできること(主な機能一覧)
- Unity Editor を自然言語で制御(Claude Desktop / Cursor などと連携)
-
メニューアイテム実行
例:File → Save Projectなどを自動実行 -
アセットの作成・インポート・修正・削除
(テクスチャ、モデル、プレハブなど) - GameObject の作成・検索・変更・削除・コンポーネント操作
- プレハブの作成・編集・インスタンス化・一括変更
- シーンの作成・保存・読み込み・ヒエラルキー取得
- シェーダーの作成・読み取り・修正・削除
- C# スクリプトの作成・削除・安全なテキスト編集・構造化編集
- スクリプトの構文検証(書き込み前後のエラーチェック)
- コンソールログの取得・クリア(エラー調査の自動化)
- ユニットテストの自動実行(EditMode / PlayMode)
- 選択中オブジェクト情報の取得(Selection)
- プレイモード・コンパイル状態・アクティブシーンの監視
- エディターウィンドウ一覧取得・フォーカス制御
- レイヤー・タグの一覧取得
- 複数 Unity インスタンスの同時制御(インスタンス切り替え可能)
- カスタムツールの登録・実行
-
精密な差分適用編集(
apply_text_edits/script_apply_edits) - プロジェクト情報取得(Unity バージョン、プラットフォームなど)
-
反復作業の完全自動化
例:
「3D プレイヤーコントローラーを作って」
「シェーダーでクールなエフェクトを追加して」
→ 自然言語だけでかなり完結する
Cursor
- ファイル操作・タスク分解がかなり強い
- 「AI が隣で一緒に開発してくれる IDE」という印象
- Unity プロジェクトのような大きめの変更にも比較的対応しやすい
https://cursor.com/ja
Antigravity
- より 自動化寄り の開発環境
- 大規模なファイル変更やリライトをガンガンやってくれる
- Unity のような巨大プロジェクト構成に対して、どう攻めてくるかが見どころ
https://antigravity.google/
検証方法
今回の検証条件はこんな感じです。
- Unity バージョン:Unity 6.0000.06f1 相当
- 3D テンプレートの空プロジェクトを事前に作成済み
- 指示回数は少なめを意識しつつ、必要に応じて追加指示はあり
- 「指示に従った成果物になっているか」をチェック
- Cursor は基本 Auto モードで動かす(※これは後で「やらかし」だと気づきました)
- 最初の 2 つの検証で使う長文プロンプトは、事前に ChatGPT で生成
🧩 検証その1
Unity 3D シューティングゲームを 1 から実装してもらう
まずは「1 分くらいで遊べる 3D シューティング」を、
プロンプト 1 発で作ってもらう というタスクです。
以下のプロンプトを Agent に渡しました。
Qiita の折りたたみ(details タグ)でそのまま貼れるよう整形してあります。
Unity 3D シューティングゲーム生成用プロンプト(クリックで展開)
あなたはUnityとC#のエキスパートAIアシスタントです。Unity 6 とWebGL向けに、短時間(約1分)で遊べて、リプレイ性の高い3Dシングルプレイ・シューティングゲームを作ります。
以下のルールを常に守ってください:
- コードは クラス単位で完全な形 で提示し、不足部分がないようにしてください
-
using、class、Start、Update、SerializeFieldなど必要構文を含めた 完全スクリプト を提示 - スクリプトには 日本語コメント および xmlドキュメントコメント を記述
- 拡張可能な設計(コンポーネント分離、ScriptableObject、イベントベース)を優先
① プレイヤー操作と射撃(PlayerController.cs)
- W/A/S/D移動、マウス視点操作(縦回転制限あり)
- 左クリックで弾丸(Bulletプレハブ)発射(カメラ正面方向)
- プレイヤーHP(初期100)、
TakeDamage(int damage) - HP0で
PlayerDiedイベント発火 - 速度などの値は
SerializeFieldで調整 - 日本語コメント+使い方説明付き
② 弾丸(Bullet.cs)
- カメラ前方向に直進
- 敵に衝突で
TakeDamage(int)を呼び、消滅 - 3秒で自動消滅(未ヒットでも)
- 速度・ダメージは
SerializeField - Rigidbody は重力オフ、Collider は Trigger
- 日本語コメント+使い方説明付き
③ 敵AI(Enemy.cs)
- プレイヤーへ向けて移動
- HP(初期3)0で死亡 → スコア加算
- 距離1未満で自爆ダメージ(プレイヤーに
TakeDamage) - スコア加算は
GameManager.Instance.AddScore(int) -
Transform targetを外部からセット - 日本語コメント+使い方
④ GameManager.cs(ゲーム管理)
- Singleton(
public static GameManager Instance) - スコア&ゲーム状態管理
- 敵を2秒おきにスポーン
- HP表示、スコア表示、GameOver(TextMeshPro)
- プレイヤー死亡時 →
GameOver()→Time.timeScale = 0 - Rキーでシーンリロード
- Prefab, UI は
SerializeField - PlayerDiedイベントを購読
- 日本語コメント+使い方
⑤ 敵スポーン
-
SpawnEnemy()を定義 - プレイヤー周囲ランダム位置に敵生成
-
Enemy.target = playerTransformをセット - 2秒ごとにスポーン
- プレイヤー死亡後は停止
⑥ UI更新(GameManager内)
-
TextMeshPro
scoreTexthealthTextgameOverText
-
スコア加算時・死亡時に更新
-
UpdateUI()で処理を分離
⑦ ScriptableObject(EnemyData)
- HP / Speed / Damage をScriptableObject化
-
Enemy.csで参照 - Inspector上で調整可能
- 新しい敵タイプは複製だけで作れる構造
▼ Cursorでの実行結果
成果物
評価
-
一度で生成できてない(手動設定が指定された)ので自動設定してくださいと追加指定した
-
機能としては必要なものが実装されていました
-
移動処理は線形移動のようです
-
地面があるのと敵がカプセルなのはわかりやすいですね
-
ソースコードは使い方のREADMEなども別途つけいている
-
コメントは読みやすくすべて日本語で記載されている
-
しかしソースコードの最後にまとめて使い方をコメントで書くのは微妙に見える
-
マジックナンバーが非常に多い、拡張しやすいと指定すると
-
所要時間:40分
▼ Antigravityでの実行結果
成果物
評価
-
一度で生成できてない(手動設定が指定された)ので自動設定してくださいと追加指定した
-
機能としては必要なものが実装されていました
-
移動は慣性が入っていました
-
地面はないので距離感が分かりづらい
-
敵がキューブになっている
-
ソースコードはかなり素直な構成だがコメントが日本語と英語が混在していた
-
所要時間:15分
🧩 検証その2
テトリスをできるだけ本家に近く再現してもらう
次は少しハードルを上げて、テトリス(Tetris)を可能な範囲で忠実に再現してもらうタスクです。
ゲームルールや仕様をかなり細かく指定し、「一発で完成まで持っていってもらう」ことを目標にしました。
- テトリスをゲーム機能を細かく掘り下げてなるべく再現できるように実装してもらう
- ほかは大体一緒
Agent に渡す完成版プロンプト(クリックで展開)
You are an expert Unity 6 + C# game developer agent, fully capable of designing and implementing a complete mini-game from scratch in one pass without follow-up instructions.
Goal
Create a classic Tetris-style falling block puzzle game in Unity using C# scripts and UnityMCP.
The result must be a fully playable, single-scene game that runs immediately after pressing Play, without missing references, compile errors, or TODOs.
Development Constraints
- Unity Version: Unity 6 (2023 LTS 相当) / URP でも Built-in でも可
- Target Platform: PC(Keyboard)+WebGL 互換
- No physics gameplay(物理は使わずグリッド制御)
- No external assets(標準 Sprite / UI のみ)
- C# は完全なスクリプトを提示(using ~ class 全部)
- 各クラスに XML ドキュメントコメントを付与
- 分かりにくい処理には日本語コメントを必ず記載
- 疑似コードや未実装メソッドは禁止
Game Design – Tetris Rules (High Fidelity)
1. フィールド仕様
- 盤面サイズ:10×20(+上側バッファ数行 OK)
- 内部表現:
int[,]or enum 管理 - 空/ブロック/消去状態など区別
2. テトリミノ仕様
- 7 種類のテトリミノ:I / O / T / S / Z / J / L
- 4×4 ローカル座標
- SRS に近い簡易 Wall Kick 実装
- 7-Bag ランダマイザ採用
3. 操作仕様
-
←/→:移動(DAS + ARR 対応) -
Z:左回転 -
X:右回転 -
↓:ソフトドロップ -
Space:ハードドロップ -
C:ホールド
4. 落下・ロック・ライン消去
-
自動落下
-
ロックディレイあり(0.5 秒など)
-
ライン消去:1~4 行
-
スコアテーブル例
- 1 行:100
- 2 行:300
- 3 行:500
- 4 行:800
-
ソフト/ハードドロップ加点あり
5. ゲームフロー
- Title(Press any key)
- In-Game(Score/Level/Lines/Next/Hold)
- Pause(
Esc) - Game Over(Retry ボタン)
Architecture & Scripts
必須構成の例:
- TetrisGameManager
- TetrisBoard
- TetrominoData (ScriptableObject)
- TetrominoController
- TetrisInputHandler(DAS/ARR)
- TetrisRandomizer(7-Bag)
- TetrisHoldController
- TetrisUIController
- BoardRenderer / BlockView
Visuals & UI
- 四角形 Sprite + Color Tint
- Score / Level / Lines / Next / Hold 表示
- Game Over / Retry
- Pause 表示
Audio
- AudioSource だけ用意して差し替え可能な形で実装
- SE は簡易ビープ等で OK(データは不要)
Output Requirements
-
C# はクラスごとに完全な形で提示(コピペで動く)
-
XML コメント+日本語コメント必須
-
Unity シーンセットアップ手順を明記
- GameObject 構成
- インスペクタに設定する項目
-
未実装部分禁止(TODO や未定義メソッド禁止)
-
依存関係の説明を書く
最終指示
以上の条件をすべて満たす、高品質なテトリスゲームの完成実装一式を、
C# コード+Unity セットアップ手順をまとめて一度に出力してください。
▼ Cursor での実行結果
成果物
評価メモ
-
ここでも一度では完走せず、途中で手動設定を求められたので
「自動設定してほしい」と追加指示 -
結果として、テトリスとして遊べるところまで行かなかった
-
落下処理が動いていないようで、謎の ■ が出たまま止まっている状態に
-
ただしブロック配置自体は「なんとなくテトリミノっぽい」形状になっていた
-
見た目の再現度は高めだが、UI が画面に収まりきらず
→ レイアウト調整の追加指示が必要だった -
コメントは日本語がほぼ過不足なく付いており、説明としてはかなり親切
-
所要時間:約 50 分
▼ Antigravity での実行結果
成果物
評価メモ
-
一度では完成せず、こちらも手動設定を求められたため追加指示
-
結果としては Cursor と同様、テトリスとして遊べる状態にはならず
-
落下処理が動かず、やはり謎の ■ だけが表示される
-
ブロック形状はテトリミノになっておらず、見た目面では Cursor に劣る
-
その一方で UI は画面比率に追従して動くようになっており、
レイアウト面の作りはかなりしっかりしていた -
コメントはかなり少なく、英語コメントすらほとんどない状態
-
所要時間:約 20 分
以降は、より小さな機能単位での検証を続けています。
🧩 検証その3
Unity で火山のパーティクルを作ってもらう
▼ Cursor での実行結果
-
何も表示されず……
-
Prefab と meta を直接記述するスタイルで生成してきたが、
Reimport しないと読み込めない状態だった -
Auto モードの影響が大きそうな印象
-
結果としては動かなかったものの、Prefab 自体は一度で生成されていた
-
所要時間:約 20 分
▼ Antigravity での実行結果
-
マテリアルが表示されず……
-
パーティクルの動きとしては 火山というよりスプリンクラーっぽい 動作
-
こちらも一度では完走せず、手動設定が必須だったため
→ 追加指示で「Prefab を作るメニュー」を作ってもらう形に -
もう少し最初の指示をしっかり書けば、ちゃんと作ってくれそうな感触ではあった
-
所要時間:約 10 分
🧩 検証その4
デバッグ機能付きで「昼 ↔ 夜」の空を切り替える
▼ Cursor での実行結果
-
品質はかなり高い
-
昼と夜がフェードで切り替わり、見た目も自然
-
設定項目が多く、インスペクターからのデバッグもしやすい
-
少ない指示でも、かなり気を利かせて実装してくれた印象
-
こちらも一度で完走とはいかず、手動設定は必要だったが
→ 最終的には AddComponent だけで使える形 まで持っていけた -
所要時間:約 20 分
▼ Antigravity での実行結果
-
最初は設定必須項目が多く、修正指示を何度か入れた
-
最終的にできたものは
→ ライトの色だけが昼・夜で一瞬で切り替わる実装 -
スカイボックスにも設定は用意されているが、
結果的には「物体のライティングだけが昼夜を表現している」構成になっていた -
こちらも一度ですべて揃わず、追加指示で「Prefab を作るメニュー」を生成してもらった
-
所要時間:約 10 分
🧩 検証その5
AI 対戦・AI 同士対戦も可能なチェス
プレイヤーも敵も全自動 AI で動かせるチェスを Unity で作り、
シーンセットアップはほとんど手動で行わない ことを目標にする
▼ Cursor(Claude Opus 4.5)での実行結果
-
見た目の品質がとにかく高い(UI・盤面ともにかなりそれっぽい)
-
しかし現時点ではゲームは全く動いていない
-
コードを読む限りロジック自体はそれなりに書かれているため、
主に 呼び出しまわりの接続ミス で動いていない印象 -
再生ボタンを押すと、シーン上に必要な要素をすべて自動生成する構成
-
コードの日本語コメント量は、これまでよりかなり減少
(そもそも日本語コメントを必須とは指定していなかったので当然と言えば当然) -
README 形式の「使い方説明」は、読みやすさがかなり向上していた
-
コード生成自体のスピードもかなり早い
-
所要時間:約 10 分
▼ Antigravity での実行結果
- 未検証(時間があれば追記予定)
使ってみて気づいたこと(雑感)
箇条書きで気づきをまとめると、こんな感じでした。
-
Cursor の Auto モードで広範囲の作業を任せるのは微妙
→ モデルが何を使っているのか分かりづらく、挙動も読みにくい -
Cursor は気が利いた実装や品質の高いコードを出してくれるが、
そのぶん 処理時間は長め な印象 -
Antigravityは
→ 「指示の解釈ギリギリ」を攻めてくることが多いものの、処理速度はかなり速い
(体感では Cursor の約 2 倍くらい) -
パーツ単位の実装(部分実装)なら、Cursor の Auto でも十分使えそう
-
Cursor の Auto は「どのモデルで Agent が動いているか」を手軽に確認しづらい
- GitHub Copilot の Agent だと Auto でもモデルが分かるので、
Cursor はその点がちょっと意外だった
- GitHub Copilot の Agent だと Auto でもモデルが分かるので、
-
UnityMCP は、Unity 上では動作しているのに、Cursor からは突然アクセスできなくなる
みたいな状態になることがある- ブランチ切り替えなどを行うと UnityMCP が動かなくなることがある?
→ その場合は Unity 再起動が安定
- ブランチ切り替えなどを行うと UnityMCP が動かなくなることがある?
-
管理は Git で行っているが、
一度出力したファイルをコミットせずにリセットしたあと、
Agent に「さっきの状態に戻して」とお願いしたら、エージェント側の情報から復元してくれた
→ これはかなり便利に感じた(Cursor での出来事)
まとめ
今回は、
UnityMCP × AI エージェント(Cursor vs Antigravity)
という組み合わせで、Unity の実務タスクをどこまで任せられるかを試してみました。
ざっくりした結論としては、
-
AI Agent としての総合クオリティは Cursor がかなり良い
- 特に、画像にあるような TODO ベースの進捗管理 UI はとても使いやすい
- ただし Auto モード運用はおすすめしづらい(モデルが分かりにくい)
ちなみに Claude 4.5 Opus を選ぶと、TODO も日本語で出してくれるようになりました。
一方 Antigravity も、Gemini 自体の品質は悪くなく、
指定した意図に沿うように粘ってくれる場面が多かったです。
ただ、自分の普段の環境である
Rider + GitHub Copilot
から乗り換えるか?という観点だと、
- 「完全に AI に任せきる開発スタイル」が固まってきたら検討してもいいかな
くらいの感触でした。
IDE としての機能は、現時点ではまだ Rider などに届いていない印象もあります。
実際に使ってみて、気をつけておきたいポイント
最後に、これから Unity × AI Agent を試す方に向けて、
「これは最初から書いておいたほうがよさそう」と感じたポイントをいくつかまとめておきます。
- 完全自動化したいなら、その旨をプロンプト中で明示したほうがいい
- ブランチを切り替えたりしたときは、
UnityMCP が UI 上は動作中に見えても実際は死んでいることがあるので、
Unity を再起動しておくと安心 -
マジックナンバーはかなり出やすい
→ もし避けたいなら「マジックナンバー禁止」と明記したほうがよい - そもそも
「どのコーディング規約に従うか」
を最初に指定しておいたほうが、統一されたコードになりやすい
リポジトリ
今回使ったリポジトリはこちらです。
PR ごとに比較できるようにしてあるので、挙動が気になる方は差分を見ると面白いかもしれません。
https://github.com/sutaa12/MCP-Game/pulls
おまけ
最後に、Claude Code にブラウザゲームを作ってもらった結果も少しだけ紹介します。
ブラウザベースだと、かなり完成度の高いゲームが一瞬で出てきてびっくりしました。
以上になります。
ここまで読んでいただき、本当にありがとうございました!



























