| 🇺🇸英語 | 🇨🇳簡体中文 | 🇯🇵日本語 |
|---|
,/(/. *(/,
*/(((((/. *((((((*.
.*((((((((((/. *((((((((((/.
./((((((((((((((/ *((((((((((((((/,
,/(((((((((((((/*. */(((((((((((((/*.
,%%#((/((((((* ,/(((((/(#&@@(
,%%##%%##((((((/*. ,/((((/(#&@@@@@@(
,%%######%%##((/(((/*. .*/(((//(%@@@@@@@@@@@(
,%%####%#(%%#%%##((/((((((((//#&@@@@@@&@@@@@@@@(
,%%####%( /#%#%%%##(//(#@@@@@@@%, #@@@@@@@(
,%%####%( *#%###%@@@@@@( #@@@@@@@(
,%%####%( #%#%@@@@, #@@@@@@@(
,%%##%%%( #%#%@@@@, #@@@@@@@(
,%%%#* #%#%@@@@, *%@@@(
., ,/##*. #%#%@@@@, ./&@#* *`
,/#%#####%%#/, #%#%@@@@, ,/&@@@@@@@@@&\.
`*#########%%%%###%@@@@@@@@@@@@@@@@@@&*´
`*%%###########%@@@@@@@@@@@@@@&*´
`*%%%######%@@@@@@@@@@&*´
`*#%%##%@@@@@&*´
`*%#%@&*´
███╗ ███╗ ██████╗██████╗ ██╗ ██╗███╗ ██╗██╗████████╗██╗ ██╗
████╗ ████║██╔════╝██╔══██╗ ██║ ██║████╗ ██║██║╚══██╔══╝╚██╗ ██╔╝
██╔████╔██║██║ ██████╔╝ ██║ ██║██╔██╗ ██║██║ ██║ ╚████╔╝
██║╚██╔╝██║██║ ██╔═══╝ ██║ ██║██║╚██╗██║██║ ██║ ╚██╔╝
██║ ╚═╝ ██║╚██████╗██║ ╚██████╔╝██║ ╚████║██║ ██║ ██║
╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═╝
MCP Unityは、Unityエディター向けのModel Context Protocolの実装であり、AIアシスタントがUnityプロジェクトと対話できるようにします。このパッケージは、UnityとMCPプロトコルを実装するNode.jsサーバー間のブリッジを提供し、Claude、Windsurf、CursorなどのAIエージェントがUnityエディター内で操作を実行できるようにします。
MCP Unityは、UnityのLibrary/PackedCacheフォルダーをワークスペースに追加することで、VSCode系IDE(Visual Studio Code、Cursor、Windsurf)との自動統合を提供します。この機能により:
- Unityパッケージのコードインテリジェンスが向上
- Unityパッケージのより良いオートコンプリートと型情報が有効化
- AIコーディングアシスタントがプロジェクトの依存関係を理解するのに役立つ
-
execute_menu_item: Unityメニュー項目(MenuItem属性でタグ付けされた関数)を実行例: "新しい空のGameObjectを作成するためにメニュー項目'GameObject/Create Empty'を実行"
-
select_gameobject: パスまたはインスタンスIDでUnity階層内のゲームオブジェクトを選択例: "シーン内のMain Cameraオブジェクトを選択"
-
update_gameobject: GameObject のコアプロパティ(名前、タグ、レイヤー、アクティブ/静的状態)を更新、または存在しない場合は作成します例: "Playerオブジェクトのタグを ‘Enemy’ に設定し、非アクティブにする"
-
update_component: GameObject上のコンポーネントフィールドを更新、またはGameObjectに含まれていない場合は追加例: "PlayerオブジェクトにRigidbodyコンポーネントを追加し、その質量を5に設定"
-
add_package: Unityパッケージマネージャーに新しいパッケージをインストール例: "プロジェクトにTextMeshProパッケージを追加"
-
run_tests: Unityテストランナーを使用してテストを実行例: "プロジェクト内のすべてのEditModeテストを実行"
-
send_console_log: Unityにコンソールログを送信例: "Unity Editorにコンソールログを送信"
-
add_asset_to_scene: AssetDatabaseからアセットをUnityシーンに追加例: "プロジェクトからPlayerプレハブを現在のシーンに追加"
-
create_prefab: プレハブを作成し、オプションでMonoBehaviourスクリプトとシリアライズされたフィールド値を設定例: "'PlayerController'スクリプトから'Player'という名前のプレハブを作成"
-
recompile_scripts: Unityプロジェクト内のすべてのスクリプトを再コンパイル例: "Unityプロジェクト内のすべてのスクリプトを再コンパイル"
-
create_scene: 新しいシーンを作成し、指定されたパスに保存例: "Scenesフォルダに'Level1'という新しいシーンを作成"
-
load_scene: パスまたは名前でシーンをロード(オプションで追加ロード可能)例: "MainMenuシーンをロード"
-
delete_scene: パスまたは名前でシーンを削除し、ビルド設定から削除例: "プロジェクトから古いTestSceneを削除"
-
get_gameobject: すべてのコンポーネントを含む特定のGameObjectの詳細情報を取得例: "Player GameObjectの詳細を取得"
-
get_console_logs: ページネーションをサポートしてUnityコンソールからログを取得例: "Unityコンソールから最新の20件のエラーログを表示"
-
save_scene: 現在のアクティブなシーンを保存(オプションで別名保存可能)例: "現在のシーンを保存" または "シーンを'Assets/Scenes/Level2.unity'として保存"
-
get_scene_info: 名前、パス、ダーティ状態、ロードされたすべてのシーンを含むアクティブなシーンの情報を取得例: "プロジェクトで現在ロードされているシーンは?"
-
unload_scene: 階層からシーンをアンロード(シーンアセットは削除しない)例: "階層からUIシーンをアンロード"
-
duplicate_gameobject: シーン内のGameObjectを複製(オプションで名前変更や親の再設定が可能)例: "Enemyプレハブを5回複製し、Enemy_1からEnemy_5に名前を変更"
-
delete_gameobject: シーンからGameObjectを削除例: "シーンから古いPlayerオブジェクトを削除"
-
reparent_gameobject: 階層内のGameObjectの親を変更例: "HealthBarオブジェクトをUI Canvasの子に移動"
-
move_gameobject: GameObjectを新しい位置に移動(ローカルまたはワールド空間)例: "Playerオブジェクトをワールド空間の位置(10, 0, 5)に移動"
-
rotate_gameobject: GameObjectを新しい回転に変更(ローカルまたはワールド空間、オイラー角またはクォータニオン)例: "CameraをY軸に45度回転"
-
scale_gameobject: GameObjectを新しいローカルスケールに変更例: "Enemyオブジェクトを2倍のサイズに拡大"
-
set_transform: 単一の操作でGameObjectの位置、回転、スケールを設定例: "Cubeの位置を(0, 5, 0)、回転を(0, 90, 0)、スケールを(2, 2, 2)に設定"
-
create_material: 指定されたシェーダーで新しいマテリアルを作成し、プロジェクトに保存例: "URP Litシェーダーを使用して'EnemyMaterial'という赤いマテリアルを作成"
-
assign_material: GameObjectのRendererコンポーネントにマテリアルを割り当て例: "'EnemyMaterial'をEnemy GameObjectに割り当て"
-
modify_material: 既存のマテリアルのプロパティ(色、浮動小数点数、テクスチャ)を変更例: "'EnemyMaterial'の色を青に変更し、メタリックを0.8に設定"
-
get_material_info: シェーダーとすべてのプロパティを含むマテリアルの詳細情報を取得例: "'PlayerMaterial'のすべてのプロパティを表示"
-
batch_execute: 単一のバッチリクエストで複数のツール操作を実行し、ラウンドトリップを削減しアトミック操作を可能にする(失敗時のロールバックオプション付き)例: "単一のバッチ操作でEnemy_1からEnemy_10という名前の10個の空のGameObjectを作成"
-
unity://menu-items:execute_menu_itemツールを容易にするために、Unityエディターで利用可能なすべてのメニュー項目のリストを取得例: "GameObject作成に関連する利用可能なすべてのメニュー項目を表示"
-
unity://scenes-hierarchy: 現在のUnityシーン階層内のすべてのゲームオブジェクトのリストを取得例: "現在のシーン階層構造を表示"
-
unity://gameobject/{id}: シーン階層内のインスタンスIDまたはオブジェクトパスで特定のGameObjectに関する詳細情報を取得例: "Player GameObjectに関する詳細情報を取得"
-
unity://logs: Unityコンソールからのすべてのログのリストを取得例: "Unityコンソールからの最近のエラーメッセージを表示"
-
unity://packages: Unityパッケージマネージャーからインストール済みおよび利用可能なパッケージ情報を取得例: "プロジェクトに現在インストールされているすべてのパッケージをリスト"
-
unity://assets: Unityアセットデータベース内のアセット情報を取得例: "プロジェクト内のすべてのテクスチャアセットを検索"
-
unity://tests/{testMode}: Unityテストランナー内のテスト情報を取得例: "プロジェクトで利用可能なすべてのテストをリスト"
- Unity 6以降 - サーバーをインストールするため
- Node.js 18以降 - サーバーを起動するため
- npm 9以降 - サーバーをデバッグするため
Important
プロジェクトパスにスペースを含めることはできません
Unity プロジェクトのファイルパスにスペースを含めないことが非常に重要です。 プロジェクトパスにスペースが含まれている場合、MCP クライアント(例:Cursor、Claude、Windsurf)は MCP Unity サーバーに接続できません。
例:
- ✅ 動作します:
C:\Users\YourUser\Documents\UnityProjects\MyAwesomeGame - ❌ 失敗します:
C:\Users\Your User\Documents\Unity Projects\My Awesome Game
インストールを進める前に、プロジェクトがスペースを含まないパスにあることを確認してください。
このMCP Unityサーバーのインストールは複数ステップのプロセスです:
MCP Unityサーバーを実行するには、コンピューターにNode.js 18以降がインストールされている必要があります:
Windows
- Node.jsダウンロードページにアクセス
- LTSバージョンのWindowsインストーラー(.msi)をダウンロード(推奨)
- インストーラーを実行し、インストールウィザードに従う
- PowerShellを開いて以下を実行してインストールを確認:
node --version
macOS
- Node.jsダウンロードページにアクセス
- LTSバージョンのmacOSインストーラー(.pkg)をダウンロード(推奨)
- インストーラーを実行し、インストールウィザードに従う
- または、Homebrewがインストールされている場合は以下を実行:
brew install node@18
- ターミナルを開いて以下を実行してインストールを確認:
node --version
- Unityパッケージマネージャーを開く(Window > Package Manager)
- 左上隅の"+"ボタンをクリック
- "Add package from git URL..."を選択
- 入力:
https://github.com/CoderGamester/mcp-unity.git - "Add"をクリック
オプション1: Unityエディターを使用して設定
- Unityエディターを開く
- Tools > MCP Unity > Server Windowに移動
- 以下の画像のようにAI LLMクライアントの"Configure"ボタンをクリック
- 表示されるポップアップで設定インストールを確認
オプション2: 手動設定
AIクライアントのMCP設定ファイル(例:Claude Desktopのclaude_desktop_config.json)を開き、以下のテキストをコピー:
ABSOLUTE/PATH/TOをMCP Unityインストールの絶対パスに置き換えるか、UnityエディターMCPサーバーウィンドウ(Tools > MCP Unity > Server Window)からテキストをコピー
{
"mcpServers": {
"mcp-unity": {
"command": "node",
"args": [
"ABSOLUTE/PATH/TO/mcp-unity/Server~/build/index.js"
]
}
}
}- Unityエディターを開く
- Tools > MCP Unity > Server Window に移動
- "Start Server" をクリックして WebSocket サーバーを起動
- Claude Desktop または AI コーディング IDE(例:Cursor IDE、Windsurf IDE など)を開き、Unity ツールの実行を開始
AI クライアントが WebSocket サーバーに接続すると、ウィンドウの緑色のボックスに自動的に表示されます
デフォルトでは、WebSocket サーバーは '8090' ポートで動作します。次の手順でポートを変更できます:
- Unityエディターを開く
- Tools > MCP Unity > Server Window に移動
- "WebSocket Port" の値を希望のポート番号に変更
- Unity はシステム環境変数 UNITY_PORT を新しいポート番号に設定
- Node.js サーバーを再起動
- 再度 "Start Server" をクリックして、Unity Editor の WebSocket を Node.js MCP サーバーに再接続
デフォルトでは、MCPサーバーとWebSocket間のタイムアウトは 10 秒です。 お使いの環境に応じて以下の手順で変更できます:
- Unityエディターを開く
- Tools > MCP Unity > Server Window に移動
- Request Timeout (seconds) の値を希望のタイムアウト秒数に変更
- Unityが環境変数
UNITY_REQUEST_TIMEOUTに新しい値を設定 - Node.jsサーバーを再起動
- Start Server を再度クリックして再接続
Tip
AIコーディングIDE(Claude Desktop、Cursor IDE、Windsurf IDEなど)とMCPサーバー間のタイムアウトは、使用するIDEによって異なる場合があります。
デフォルトでは、WebSocket サーバーは 'localhost' にバインドされています。他のマシンから MCP ブリッジ接続を許可するには、以下の手順に従ってください:
- Unity エディターを開く
- メニューから「Tools > MCP Unity > Server Window」を選択
- 「Allow Remote Connections(リモート接続を許可)」チェックボックスを有効にする
- Unity は WebSocket サーバーを '0.0.0.0'(すべてのインターフェース)にバインドします
- Node.js サーバーを再起動して新しいホスト設定を適用する
- リモートで MCP ブリッジを実行する場合は、環境変数 UNITY_HOST を Unity 実行マシンの IP アドレスに設定して起動:
UNITY_HOST=192.168.1.100 node server.js
Node.js サーバーのビルド
MCP Unity サーバーは Node.js で構築されています。TypeScript コードを build ディレクトリにコンパイルする必要があります。問題がある場合は、以下の手順で強制的にインストールできます:
- Unityエディターを開く
- Tools > MCP Unity > Server Window に移動
- 「Force Install Server」ボタンをクリック
手動でビルドする場合は、以下の手順に従ってください:
- ターミナル/PowerShell/コマンドプロンプトを開く
- Server ディレクトリに移動:
cd ABSOLUTE/PATH/TO/mcp-unity/Server~ - 依存関係をインストール:
npm install
- サーバーをビルド:
npm run build
- サーバーを実行:
node build/index.js
MCP Inspector でデバッグ
@modelcontextprotocol/inspector を使用してサーバーをデバッグします:
- Powershell
npx @modelcontextprotocol/inspector node Server~/build/index.js- コマンドプロンプト/ターミナル
npx @modelcontextprotocol/inspector node Server~/build/index.jsターミナルを閉じる前、または MCP Inspector でデバッグする前に、必ず Ctrl + C でサーバーを終了してください。
コンソールログを有効化
- ターミナルまたは log.txt ファイルにログ出力を有効化:
- Powershell
$env:LOGGING = "true" $env:LOGGING_FILE = "true"
- コマンドプロンプト/ターミナル
set LOGGING=true set LOGGING_FILE=true
MCP Unityとは何ですか?
MCP Unityは、Model Context Protocol(MCP)を使用して、Unityエディター環境をAIアシスタントLLMツールに接続する強力なブリッジです。
本質的に、MCP Unityは次のことを行います。
- Unityエディターの機能(オブジェクトの作成、コンポーネントの変更、テストの実行など)を、AIが理解して使用できる「ツール」および「リソース」として公開します。
- Unity内にWebSocketサーバーを、そしてMCPを実装するNode.jsサーバー(UnityへのWebSocketクライアントとして機能)を実行します。これにより、AIアシスタントはUnityにコマンドを送信し、情報を受け取ることができます。
- AIアシスタントとの自然言語プロンプトを使用して、Unityプロジェクト内で複雑なタスクを実行できるようにし、開発ワークフローを大幅に加速します。
MCP Unityを使用する理由は何ですか?
MCP Unityは、開発者、アーティスト、プロジェクトマネージャーにいくつかの魅力的な利点を提供します。
- 開発の加速: AIプロンプトを使用して、反復的なタスクを自動化し、ボイラープレートコードを生成し、アセットを管理します。これにより、創造的で複雑な問題解決に集中する時間を確保できます。
- 生産性の向上: メニューを手動でクリックしたり、簡単な操作のためにスクリプトを作成したりすることなく、Unityエディターの機能と対話できます。AIアシスタントは、Unity内でのあなたの能力を直接拡張します。
- アクセシビリティの向上: UnityエディターやC#スクリプトの深い複雑さにあまり慣れていないユーザーでも、AIのガイダンスを通じてプロジェクトに意味のある貢献や変更を行うことができます。
- シームレスな統合: MCPをサポートするさまざまなAIアシスタントやIDEと連携するように設計されており、開発ツールキット全体でAIを活用する一貫した方法を提供します。
- 拡張性: プロトコルとツールセットは拡張可能です。プロジェクト固有またはUnityの機能をAIに公開するための新しいツールとリソースを定義できます。
- コラボレーションの可能性: AIがチームメンバーが従来行っていたタスクを支援したり、プロジェクトの構造や操作をガイドすることで新しい開発者のオンボーディングを支援したりする新しいコラボレーション方法を促進します。
MCP Unityは、今後登場するUnity 6.2のAI機能と比較してどうですか?
Unity 6.2では、以前のUnity Muse(テクスチャやアニメーション生成などの生成AI機能用)やUnity Sentis(Unityランタイムでニューラルネットワークを実行するため)を含む、新しい組み込みAIツールが導入される予定です。Unity 6.2はまだ完全にリリースされていないため、この比較は公開されている情報と予想される機能に基づいています。
-
焦点:
- MCP Unity: 主にエディターの自動化と対話に焦点を当てています。これにより、外部AI(LLMベースのコーディングアシスタントなど)がUnityエディター自体を制御およびクエリして、シーン、アセット、プロジェクト設定を操作できます。これは、エディター内での開発者のワークフローを強化することです。
- Unity 6.2 AI:
- エディター内でのコンテンツ作成(テクスチャ、スプライト、アニメーション、動作、スクリプトの生成)と、Unityエディターインターフェースに直接統合された一般的なタスクのAI支援を目的としています。
- UnityのドキュメントとAPI構造に関するあらゆる質問に、Unity環境により正確なカスタマイズされた例で答えるための微調整されたモデル。
- AIモデルの推論を実行する機能を追加し、NPCの動作、画像認識などの機能のために、事前にトレーニングされたニューラルネットワークをゲームまたはアプリケーション内にデプロイして実行できるようにします。
-
ユースケース:
- MCP Unity: 「新しい3Dオブジェクトを作成し、名前を「Player」にし、Rigidbodyを追加して、質量を10に設定してください。」「すべてのプレイモードテストを実行してください。」「コンソールログのエラーを修正するよう依頼してください。」「カスタムメニュー項目「iOS用のビルドを準備」を実行し、発生する可能性のあるエラーを修正してください。」
- Unity 6.2 AI: 「このマテリアルにSFテクスチャを生成してください。」「シーン内のすべてのツリーの位置を「forest」とタグ付けされたテレインゾーン内に配置するように更新してください。」「このキャラクターのアニメーションを作成してください。」「キャラクターを完成させるために2Dスプライトを生成してください。」「コンソールログのエラーの詳細を尋ねてください。」
-
補完的であり、相互排他的ではない: MCP UnityとUnityのネイティブAIツールは補完的であると見なすことができます。AIコーディングアシスタントでMCP Unityを使用してシーンを設定したり、アセットを一括変更したりしてから、Unity AIツールを使用して特定のテクスチャを生成したり、アニメーションや2Dスライトをそれらのアセットの1つに作成したりすることができます。MCP Unityは、より広範な外部AIサービスと統合したり、カスタム自動化ワークフローを構築したりしたい開発者にとって強力な、プロトコルベースのエディターとの対話方法を提供します。
現在、どのMCPホストとIDEがMCP Unityをサポートしていますか?
MCP Unityは、MCPクライアントとして機能できるAIアシスタントまたは開発環境と連携するように設計されています。エコシステムは成長していますが、現在の既知の統合または互換性のあるプラットフォームには以下が含まれます。
- Cursor
- Windsurf
- Claude Desktop
- Claude Code
- Codex CLI
- GitHub Copilot
- Google Antigravity
プロジェクトにカスタムツールでMCP Unityを拡張できますか?
はい、もちろんです!MCP Unityアーキテクチャの重要な利点の1つは、その拡張性です。
- Unity内(C#):
McpToolBase(またはリソースの同様のベース)を継承する新しいC#クラスを作成して、カスタムUnityエディター機能を公開できます。これらのツールは、McpUnityServer.csに登録されます。たとえば、プロジェクト固有のアセットインポートパイプラインを自動化するツールを作成できます。 - Node.jsサーバー内(TypeScript): 次に、
Server/src/tools/ディレクトリに対応するTypeScriptツールハンドラーを定義し、入力/出力のZodスキーマを含め、Server/src/index.tsに登録します。このNode.js部分は、新しいC#ツールへのリクエストをUnityに転送します。
これにより、AIの機能をゲームやアプリケーションの特定のニーズとワークフローに合わせて調整できます。
MCP Unityは無料で利用できますか?
はい、MCP UnityはMITライセンスの下で配布されているオープンソースプロジェクトです。ライセンス条項に従って、自由に利用、変更、配布できます。
MCP Unityに接続できないのはなぜですか?
- WebSocket サーバーが起動していることを確認(Unity の Server Window を確認)
- MCP クライアントからコンソールログを 1 件送信して、MCP クライアントと Unity サーバー間の再接続をトリガー
- Unity Editor の MCP Server ウィンドウ(Tools > MCP Unity > Server Window)でポート番号を変更
MCP Unity サーバーが起動しないのはなぜですか?
- Unity コンソールにエラーメッセージがないか確認
- Node.js が正しくインストールされ、PATH から実行できることを確認
- Server ディレクトリで依存関係がインストールされていることを確認
Play Mode テストを実行すると接続失敗エラーが発生するのはなぜですか?
run_tests ツールは次のレスポンスを返すことがあります:
Error:
Connection failed: Unknown error
これは、Play Mode に切り替える際のドメインリロードでブリッジ接続が失われるために発生します。回避策として、Edit > Project Settings > Editor > "Enter Play Mode Settings" で Reload Domain をオフにしてください。
WSL2 内で MCP(Node.js)サーバーを実行し、Unity が Windows 11 上で動作している場合、ws://localhost:8090/McpUnity への接続が ECONNREFUSED で失敗することがあります。
原因:WSL2 と Windows は別々のネットワーク名前空間を持ち、WSL2 内の localhost は Windows ホストを指しません。既定では Unity は localhost:8090 で待ち受けます。
- Windows 11: 設定 → システム → 開発者向け → WSL → 「ミラー化モードのネットワーク」を有効化。
- または
.wslconfigで設定(適用後にwsl --shutdownを実行して WSL を再起動):
[wsl2]
networkingMode=mirrored有効化後は Windows と WSL2 で localhost が共有され、既定設定(localhost:8090)で動作します。
MCP クライアントを起動する前に、WSL シェルで以下を設定します:
# resolv.conf から検出した Windows ホスト IP を使用
export UNITY_HOST=$(grep -m1 nameserver /etc/resolv.conf | awk '{print $2}')これにより、Server~/src/unity/mcpUnity.ts は localhost の代わりに ws://$UNITY_HOST:8090/McpUnity に接続します(UNITY_HOST を参照し、必要に応じて ProjectSettings/McpUnitySettings.json の Host も使用されます)。
- Unity: Tools → MCP Unity → Server Window → 「Allow Remote Connections」を有効化(
0.0.0.0にバインド)。 - Windows ファイアウォールで、設定したポート(既定 8090)への受信 TCP を許可します。
- WSL2 からは、Windows ホストの IP(解決策 2 を参照)またはミラー化有効時は
localhostへ接続します。
Note
既定のポートは 8090 です。Unity の Server Window(Tools → MCP Unity → Server Window)で変更できます。値は McpUnitySettings に対応し、ProjectSettings/McpUnitySettings.json に保存されます。
npm i -g wscat
# ミラー化ネットワーク有効化後
wscat -c ws://localhost:8090/McpUnity
# または Windows ホスト IP を使用
wscat -c ws://$UNITY_HOST:8090/McpUnityご質問やサポートが必要な場合は、このリポジトリのIssueを開くか、以下までご連絡ください:
- LinkedIn:
- Discord: gamester7178
- Email: game.gamester@gmail.com
貢献は大歓迎です!プルリクエストを送信するか、Issueを開いてください。
コミットメッセージはConventional Commits形式に従ってください。
本プロジェクトはMIT Licenseの下で提供されます。





