🐼

CursorでUnityMCP比較

に公開

はじめに

前にCursorでVRChat向けに将棋ゲームを作ったときに言及した、2つのUnity MCPを触ってみたので比較の感想文です。

https://github.com/justinpbarnett/unity-mcp

https://github.com/isuzu-shiranui/UnityMCP

比較のために作ったもの

クリックターゲットゲームを作りました。正式名称が正しいかは分かりませんが、画面内にターゲット(今回はCube)が一定時間表示され、クリックできれば得点になるゲームです。

https://x.com/panda_nakami/status/1922257539682508930

仕様

簡単な作りたいもの.mdを書き、Cursorに質問してもらいながら仕様.mdにまとめました。

  1. 作りたいもの
  2. 質問/回答
  3. 仕様

🐼justinpbarnett/unity-mcpで開発🐼

https://github.com/justinpbarnett/unity-mcp

特徴

用意されているMCPで大体何でもできると思います。(GameObject生成/スクリプトアタッチ/シーン情報読み込みなど)
拡張性はない(はず)なので痒いところに手が届かなかったら他の手段を考える必要がありそうです。
今回は簡単なゲーム作っただけなので、どこまでできるかは正直なところ分かりません。

インストール

GitHubのREADMEに書いてある通りです。特に迷わないと思います。

CursorにREADMEを読ませる

CursorにGitHubのREADMEを読んでもらいます。たぶんこれで使い方ばっちりです。😊

実装

スクリプト

仕様に従ってスクリプトを生成してもらいます。GameObjectの構築まで一括でやってもらうつもりでしたが、とりあえずスクリプトだけ作ってくれました。ここまではCursor単体でもできます。

シーン構築

  • ドキドキしながらシーン構築できるか質問

    できるらしい。

  • シーン構築を依頼

  • MCPの様子

  • それっぽく出来ている

シーン情報取得

MCP経由で以下のような情報が取得できました。
1枚目はHierarchy全体を取るようで、現状の小規模なプロジェクトであれば問題ありませんが、プロジェクトが大きくなると課題になるかもしれません。


後処理

ボタンの表示位置などを手動で調整します。将来はデザインもいい感じにしてほしいけど今回は手動です。
メインカメラの描画範囲に入っているかどうかの判定も必要なので、現時点では厳しいです。
あとEventSystemがなかったため、最初ボタンを押せませんでした。この辺はやっぱり設計フェーズが必要ですね。

そして、冒頭の動画へ。

🐼isuzu-shiranui/UnityMCPで開発🐼

https://github.com/isuzu-shiranui/UnityMCP

特徴

基本的にUnityとMCPで繋がるための仕組みが提供されています。
標準でいくつかツールが用意されていますが、それだけだとあまり出来ることはないです。
自分でカスタムハンドラーを作るか、どこからか持ってくることになります。作るためのインタフェースはGitHubのREADMEに書いています。
標準で用意されている中で、おそらく操作として使えるのは menu_execute(メニュー項目実行)のツールです。
(HierarchyでGameObject選択したときに出てくるGameObject/Create Emptyのメニューとかを実行できます。)
シーン操作するエディタスクリプトを作って、それをmenu_executeで呼ぶようにすれば、いろいろ出来るようにはなりますが、その使い方であればそもそもjustinpbarnett/unity-mcpが大体何でもできるので、そちらを使えばいいと思います。isuzu-shiranui/UnityMCPはカスタムハンドラーを揃えることが前提だと思います。

インストール

GitHubのREADMEはClaude Desktop向けに書かれています。
Cursor向けには「Configuration Preview」セクションを開いて設定JSONをクリップボードにコピーまで実行して、Cursorのmcp.jsonにいい感じに貼り付けてください。
Cursorで他のMCPを使ったことがあれば分かると思います。

サンプルハンドラー

サンプルのハンドラーがあるようです。CodeExecutionCommandHandlerは試していませんが、いろいろできるかもしれません。

CursorにREADMEを読ませる

CursorにGitHubのREADMEを読んでもらいい、シーン構築可能か聞きます。
カスタムハンドラー作れと言われます。

カスタムハンドラー

カスタムハンドラーは3種類あります

  1. コマンドハンドラー
    GameObject作ったりする用です。
  2. リソースハンドラー
    シーン情報取得したりする用です。
  3. プロンプトハンドラー
    Unity内にLLMとかAI Agent用意していたらそれと会話する用です。しばらく使いません。

カスタムハンドラー作成

とりあえずGameObject作成スクリプトアタッチスクリプトのSerializeField設定のコマンドハンドラーを作りました。
基本的にはCursorに作ってもらいました。

実装

スクリプト

justinpbarnett/unity-mcpと同じ

シーン構築


このままいけそう・・・!!と思いましたが、カスタムハンドラーのバグ取り(特にJavaScript部分)に結構苦戦しました。でも本題に関係ないので割愛します。

それなりの頻度でJavaScript側のTcpServerと、UnityEditor側のTcpClientが切断されてしまい、少し面倒でした。
ドメインリロード後とか、Preferencesで再接続をした後とかよくなりました。

シーン情報取得

ここまでで力尽きたので、シーン情報取得のハンドラーを作れていません。
リソースハンドラーで作ることになります。
作る際は、実際の運用に耐えられるハンドラーにしたいと思います。

後処理

justinpbarnett/unity-mcpと同じ

そして、冒頭の動画へ。

🐼比較🐼

  • とりあえず簡単なものを作りたい場合は、unity-mcpが楽だと思います。ただし、拡張が必要になったときは困難です。
  • UnityMCPはカスタマイズの自由度が高いですが、標準コマンドでできることが限られているため、導入時は大変です。必要なコマンドを作るのは楽しい反面、揃えるのはかなり大変だと思います。
  • 他にもUnity MCPがあるようですが、話題になったら使ってみようと思います。

以下妄想

unity-mcpUnityMCPの共存というのもありかもしれません。
基本はunity-mcpで、必要に応じてUnityMCPを使う。
プロジェクトが大きくなってくると、生のシーン情報は数十MBを超えるデータになり、Cursorに読ませるには厳しくなってきます。なのでいかに必要最低限の情報でCursorにシーンを理解させるかが大切だと思っており、unity-mcpではその際のデータ取捨選択に不向きで、UnityMCPでカスタムするのがよいかと思っています。

ただ、unity-mcpUnityMCPを共存させるのであれば、名前は分かりやすいように別々にしておかないと人間もCursorも混乱しそうです。

また、UnityMCPの標準コマンドが充実したり、有志の方がコマンドを作ってくれたりすれば、UnityMCP一本に絞りやすくなると思います。他力本願です。😇

🐼後日談(2025/05/17)🐼

UnityMCPでシーン構造を取得するコマンドハンドラ作りましたが、結局Cursorが扱えるテキストのデータ量が思った以上に少ないため実用は難しい感じでした。(UnityMCPの問題ではなく、その結果を扱うCursorの話)
シーン構造情報として、MCP取得結果(数千行程度のJSON)を保存させようとしましたが、先頭200行程度の出力となりました。
(なるべく情報量を削って出力するようにしましたがそれでも数千行になってしまいました。)
おそらくファイルを手動で用意したとしてもCursorはこの量の情報を理解できないと思います。
そして、シーン構造を理解できないのであれば、Cursorが自分でシーン構築/更新をするのは難しいと思います。
人間から指示された階層にGameObject作って、スクリプトアタッチしてとかならできますが、別にそれは嬉しくないです。

CursorでのUnityMCPによる連携はまだもう少し先の話かもしれません。
(今回作成したような極小規模のプロジェクトだったらいけますが)

とはいってもCursorはプロジェクトのスクリプト開発だけでも十分有用なのでしばらくはこのまま使っていきます。

Discussion