Skip to content

NHidano/UnityMCPCustomTools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UnityMCPCustomTools

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 を参照してください。

インストール

UPM (Unity Package Manager) 経由 — 推奨

Packages/manifest.jsondependencies に以下を追加してください:

{
  "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

セットアップ手順

  1. Handlers/ ディレクトリ内の .js ファイルをすべて、UnityMCP の TypeScript クライアントの build/handlers/ ディレクトリにコピーしてください(.meta ファイルは不要です)。

  2. ブリッジサーバーの HandlerDiscovery が自動的にハンドラーを検出・登録します。追加のコード変更は不要です。

注意: ブリッジサーバー側のハンドラーは、Unity 側の C# ハンドラーとセットで動作します。C# ハンドラーのインストール(UPM パッケージの導入)と、ブリッジサーバーへの JS ファイル配置の両方が必要です。

ハンドラー一覧

本パッケージは以下の 7 つのハンドラーを提供します。すべてのレスポンスは JSON 形式で、success (bool) フィールドを含みます。エラー時は error フィールドが付与されます。

EditorWindow (editorwindow)

EditorWindow の一覧取得・フォーカス・オープンを行います。

アクション パラメータ 説明
list なし 開いている EditorWindow の一覧を取得
focus typeName or windowName 指定ウィンドウにフォーカス
open typeName 指定の EditorWindow を開く

Hierarchy (hierarchy)

Hierarchy ウィンドウの情報取得・検索を行います。Prefab 編集モードに対応しています。

アクション パラメータ 説明
list depth (任意, デフォルト 3) Hierarchy ツリーを指定深度まで取得
search query GameObject 名で検索(部分一致・大文字小文字区別なし)
getchildren path or instanceId 指定 GameObject の直接の子を取得

Selection (selection)

GameObject の選択・Ping・フレーミングを行います。

アクション パラメータ 説明
select path / name / instanceId 単一の GameObject を選択
selectmultiple paths (配列) / instanceIds (配列) 複数の GameObject を同時に選択
ping path / instanceId Hierarchy 内で GameObject をハイライト
frame なし 選択中の GameObject を Scene View でフレーミング
getcurrent なし 現在の選択状態を取得

Inspector (inspector)

コンポーネントやプロパティの情報を取得します。

アクション パラメータ 説明
getcomponents instanceId (任意) コンポーネント一覧を取得
getproperties componentType, componentIndex (任意) コンポーネントのプロパティ一覧を取得
getproperty componentType, propertyPath, componentIndex (任意) 特定プロパティの値を取得(配列・ネスト対応)
gettransform instanceId (任意) Transform 情報を取得(RectTransform 対応)
getprefabstatus instanceId (任意) Prefab ステータスとオーバーライド情報を取得

Scene (scene)

シーンの管理を行います。マルチシーン(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 (gameobject)

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 (transform)

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 の指定方法

GameObject を指定するパラメータは 3 つの方法に対応しています:

方法 パラメータ 説明
パス path "/Canvas/Panel/Button" Hierarchy 上のフルパス。最も確実
名前 name "Main Camera" 名前で検索(大文字小文字区別なし)。同名オブジェクトがある場合は最初に見つかったものが対象
インスタンス ID instanceId 12345 Unity 内部の一意な ID。hierarchy list 等のレスポンスから取得可能

使用例

MCP 経由で以下のようなコマンドを送信して Unity Editor を操作できます。

Hierarchy の確認

{ "command": "hierarchy", "action": "list", "parameters": { "depth": 2 } }

GameObject の作成と配置

{ "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" }

Inspector 情報の取得

{ "command": "inspector", "action": "getcomponents", "parameters": { "instanceId": 12345 } }
{ "command": "inspector", "action": "getproperty", "parameters": { "componentType": "MeshRenderer", "propertyPath": "m_Materials" } }

アーキテクチャ

Unity 側 (C#)

  • 名前空間: Hidano.UnityMCPCustomTools.Editor
  • アセンブリ: Hidano.UnityMCPCustomTools.Editor (Editor のみ)
  • 依存: UnityMCP.Editor, Newtonsoft.Json.dll
  • 自動登録: IMcpCommandHandler を実装するだけで UnityMCP に自動検出・登録されます
  • Prefab 対応: Hierarchy、Selection、GameObject 系のハンドラーは Prefab 編集モード中、ステージ内オブジェクトを優先的に操作します
  • Undo 対応: GameObject / Transform の操作はすべて Unity の Undo システムに登録されます

ブリッジサーバー側 (JavaScript)

  • 配置先: UnityMCP TypeScript クライアントの build/handlers/
  • 基底クラス: BaseCommandHandler(UnityMCP の core/BaseCommandHandler.js を継承)
  • スキーマ検証: Zod によるパラメータバリデーション
  • MCP アノテーション: 各ツール定義に readOnlyHintdestructiveHintopenWorldHint 等のメタ情報を付与
  • 自動検出: HandlerDiscovery により build/handlers/ 内のハンドラーが自動登録されます

免責事項

本ソフトウェアは「現状のまま (AS IS)」で提供されます。ご利用は自己責任でお願いいたします。本ソフトウェアの使用により生じたいかなる損害についても、作者は一切の責任を負いません。

本パッケージは Unity Editor のシーン・GameObject・Transform 等を MCP 経由で操作するため、意図しない変更やデータ損失が発生する可能性があります。重要なプロジェクトでは事前にバックアップを取ることを推奨します。

ライセンス

MIT License - 詳細は LICENSE ファイルを参照してください。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors