Unity Editor を MCP (Model Context Protocol) 経由で操作するためのカスタムハンドラー集です。
UnityMCP パッケージの IMcpCommandHandler インターフェースを実装し、Claude Code などの AI エージェントから Hierarchy、Inspector、Scene、GameObject、Transform などの Unity Editor 機能をプログラム的に制御できます。
- Unity 6000.3.7f1 以上
- UnityMCP (
jp.shiranui-isuzu.unity-mcp) がセットアップ済みで、Claude Code / Claude Desktop から MCP 経由で Unity と通信できる状態であること
UnityMCP 本体のインストール(パッケージ導入・TypeScript クライアント・Claude Code への MCP サーバー登録)については UnityMCP の README を参照してください。
Packages/manifest.json の dependencies に以下を追加してください:
{
"dependencies": {
"jp.shiranui-isuzu.unity-mcp": "https://github.com/isuzu-shiranui/UnityMCP.git?path=jp.shiranui-isuzu.unity-mcp",
"com.hidano.unity-mcp-tools": "https://github.com/hidano/UnityMCPCustomTools.git?path=UnityMCPCustomTools/Packages/UnityMCPCustomTools",
...
}
}このリポジトリの UnityMCPCustomTools/Packages/UnityMCPCustomTools ディレクトリを、Unity プロジェクトの Packages/ フォルダにコピーしてください。
Unity Editor でプロジェクトを開くと自動的にコンパイルされ、本パッケージの C# ハンドラーが UnityMCP に自動検出・登録されます。
本パッケージには、UnityMCP のブリッジサーバー(TypeScript/Node.js 側)に配置するカスタムコマンドハンドラー(JavaScript)も同梱されています。これらは C# ハンドラーと対になるもので、MCP ツール定義(名前・パラメータスキーマ・アノテーション)をブリッジサーバーに登録し、Unity 側の C# ハンドラーへコマンドを中継します。
ファイルは UnityMCPCustomTools/Packages/UnityMCPCustomTools/Handlers/ に格納されています:
| ファイル | 対応する C# ハンドラー |
|---|---|
EditorWindowCommandHandler.js |
EditorWindowHandler |
HierarchyCommandHandler.js |
HierarchyHandler |
SelectionCommandHandler.js |
SelectionHandler |
InspectorCommandHandler.js |
InspectorHandler |
SceneCommandHandler.js |
SceneHandler |
GameObjectCommandHandler.js |
GameObjectHandler |
TransformCommandHandler.js |
TransformHandler |
-
Handlers/ディレクトリ内の.jsファイルをすべて、UnityMCP の TypeScript クライアントのbuild/handlers/ディレクトリにコピーしてください(.metaファイルは不要です)。 -
ブリッジサーバーの
HandlerDiscoveryが自動的にハンドラーを検出・登録します。追加のコード変更は不要です。
注意: ブリッジサーバー側のハンドラーは、Unity 側の C# ハンドラーとセットで動作します。C# ハンドラーのインストール(UPM パッケージの導入)と、ブリッジサーバーへの JS ファイル配置の両方が必要です。
本パッケージは以下の 7 つのハンドラーを提供します。すべてのレスポンスは JSON 形式で、success (bool) フィールドを含みます。エラー時は error フィールドが付与されます。
EditorWindow の一覧取得・フォーカス・オープンを行います。
| アクション | パラメータ | 説明 |
|---|---|---|
list |
なし | 開いている EditorWindow の一覧を取得 |
focus |
typeName or windowName |
指定ウィンドウにフォーカス |
open |
typeName |
指定の EditorWindow を開く |
Hierarchy ウィンドウの情報取得・検索を行います。Prefab 編集モードに対応しています。
| アクション | パラメータ | 説明 |
|---|---|---|
list |
depth (任意, デフォルト 3) |
Hierarchy ツリーを指定深度まで取得 |
search |
query |
GameObject 名で検索(部分一致・大文字小文字区別なし) |
getchildren |
path or instanceId |
指定 GameObject の直接の子を取得 |
GameObject の選択・Ping・フレーミングを行います。
| アクション | パラメータ | 説明 |
|---|---|---|
select |
path / name / instanceId |
単一の GameObject を選択 |
selectmultiple |
paths (配列) / instanceIds (配列) |
複数の GameObject を同時に選択 |
ping |
path / instanceId |
Hierarchy 内で GameObject をハイライト |
frame |
なし | 選択中の GameObject を Scene View でフレーミング |
getcurrent |
なし | 現在の選択状態を取得 |
コンポーネントやプロパティの情報を取得します。
| アクション | パラメータ | 説明 |
|---|---|---|
getcomponents |
instanceId (任意) |
コンポーネント一覧を取得 |
getproperties |
componentType, componentIndex (任意) |
コンポーネントのプロパティ一覧を取得 |
getproperty |
componentType, propertyPath, componentIndex (任意) |
特定プロパティの値を取得(配列・ネスト対応) |
gettransform |
instanceId (任意) |
Transform 情報を取得(RectTransform 対応) |
getprefabstatus |
instanceId (任意) |
Prefab ステータスとオーバーライド情報を取得 |
シーンの管理を行います。マルチシーン(Additive)に対応しています。
| アクション | パラメータ | 説明 |
|---|---|---|
list |
なし | ロード済みシーンの一覧を取得 |
open |
scenePath, mode ("single" / "additive" / "additivewithoutloading") |
シーンを開く |
save |
scenePath (任意) |
シーンを保存(省略時は全シーン保存) |
close |
scenePath / sceneName, removeScene (任意) |
シーンを閉じる |
new |
setup ("defaultgameobjects" / "empty"), mode ("single" / "additive") |
新規シーンを作成 |
getactive |
なし | アクティブシーンの情報を取得 |
setactive |
scenePath / sceneName |
アクティブシーンを切り替え |
注意: Single モードでシーンを開く・新規作成する場合、未保存の変更があるとエラーになります。事前に
saveを実行してください。
GameObject の作成・削除・名前変更・複製などを行います。すべての操作で Undo に対応しています。
| アクション | パラメータ | 説明 |
|---|---|---|
create |
name (任意), parent (任意) |
空の GameObject を作成 |
createprimitive |
primitiveType, name (任意), parent (任意) |
プリミティブ (Sphere, Cube 等) を作成 |
instantiate |
prefabPath / prefabName, parent (任意) |
Prefab をインスタンス化 |
destroy |
path / name / instanceId |
GameObject を削除 |
rename |
path / name / instanceId, newName |
GameObject の名前を変更 |
setactive |
path / name / instanceId, active (bool) |
アクティブ状態を切り替え |
duplicate |
path / name / instanceId |
GameObject を複製 |
movescene |
path / name / instanceId, scenePath / sceneName |
別シーンへ移動(ルートオブジェクトのみ) |
primitiveType に指定可能な値: Sphere, Capsule, Cylinder, Cube, Plane, Quad
Transform の操作を行います。すべての操作で Undo に対応しています。
| アクション | パラメータ | 説明 |
|---|---|---|
setposition |
path / name / instanceId, x, y, z, space (任意) |
位置を設定 |
setrotation |
path / name / instanceId, x, y, z, space (任意) |
回転を設定(オイラー角) |
setscale |
path / name / instanceId, x, y, z |
スケールを設定(ローカルのみ) |
setparent |
path / name / instanceId, parentPath / parentName / parentInstanceId (任意), worldPositionStays (任意) |
親を設定(省略時はルートに移動) |
setsibling |
path / name / instanceId, index |
兄弟順序を変更 |
lookat |
path / name / instanceId, ターゲット指定 |
指定ターゲットの方向を向く |
reset |
path / name / instanceId |
Transform をリセット (0,0,0 / 0,0,0 / 1,1,1) |
transformpoint |
path / name / instanceId, x, y, z, direction (任意) |
座標空間変換(ローカル <-> ワールド) |
space パラメータ: "local" (デフォルト) / "world"
direction パラメータ: "toworld" (デフォルト) / "tolocal"
GameObject を指定するパラメータは 3 つの方法に対応しています:
| 方法 | パラメータ | 例 | 説明 |
|---|---|---|---|
| パス | path |
"/Canvas/Panel/Button" |
Hierarchy 上のフルパス。最も確実 |
| 名前 | name |
"Main Camera" |
名前で検索(大文字小文字区別なし)。同名オブジェクトがある場合は最初に見つかったものが対象 |
| インスタンス ID | instanceId |
12345 |
Unity 内部の一意な ID。hierarchy list 等のレスポンスから取得可能 |
MCP 経由で以下のようなコマンドを送信して Unity Editor を操作できます。
{ "command": "hierarchy", "action": "list", "parameters": { "depth": 2 } }{ "command": "gameobject", "action": "createprimitive", "parameters": { "primitiveType": "Cube", "name": "MyCube" } }{ "command": "transform", "action": "setposition", "parameters": { "name": "MyCube", "x": 0, "y": 1.5, "z": 3, "space": "world" } }{ "command": "scene", "action": "save" }{ "command": "inspector", "action": "getcomponents", "parameters": { "instanceId": 12345 } }{ "command": "inspector", "action": "getproperty", "parameters": { "componentType": "MeshRenderer", "propertyPath": "m_Materials" } }- 名前空間:
Hidano.UnityMCPCustomTools.Editor - アセンブリ:
Hidano.UnityMCPCustomTools.Editor(Editor のみ) - 依存:
UnityMCP.Editor,Newtonsoft.Json.dll - 自動登録:
IMcpCommandHandlerを実装するだけで UnityMCP に自動検出・登録されます - Prefab 対応: Hierarchy、Selection、GameObject 系のハンドラーは Prefab 編集モード中、ステージ内オブジェクトを優先的に操作します
- Undo 対応: GameObject / Transform の操作はすべて Unity の Undo システムに登録されます
- 配置先: UnityMCP TypeScript クライアントの
build/handlers/ - 基底クラス:
BaseCommandHandler(UnityMCP のcore/BaseCommandHandler.jsを継承) - スキーマ検証: Zod によるパラメータバリデーション
- MCP アノテーション: 各ツール定義に
readOnlyHint、destructiveHint、openWorldHint等のメタ情報を付与 - 自動検出:
HandlerDiscoveryによりbuild/handlers/内のハンドラーが自動登録されます
本ソフトウェアは「現状のまま (AS IS)」で提供されます。ご利用は自己責任でお願いいたします。本ソフトウェアの使用により生じたいかなる損害についても、作者は一切の責任を負いません。
本パッケージは Unity Editor のシーン・GameObject・Transform 等を MCP 経由で操作するため、意図しない変更やデータ損失が発生する可能性があります。重要なプロジェクトでは事前にバックアップを取ることを推奨します。
MIT License - 詳細は LICENSE ファイルを参照してください。