Get the FREE Ultimate OpenClaw Setup Guide →

unity-mcp

Scanned
npx machina-cli add skill Dqz00116/skill-lib/unity-mcp --openclaw
Files (1)
SKILL.md
14.0 KB

SKILL: unity-mcp

Unity MCP (Model Context Protocol) Server 的完整部署指南、API 使用技巧和故障排查手册。

Description

本技能涵盖:

  • Unity MCP Server 的启动与连接
  • 常用 API 操作(GameObject、Component、Scene、Asset)
  • 参数格式规范(Color、Vector3 等特殊类型)
  • 常见问题排查与解决思路

When to Invoke

使用场景:

  • 需要通过 AI 控制 Unity 编辑器执行自动化操作
  • 批量创建/修改场景物体、组件
  • 程序化生成资源或脚本
  • 远程调试和场景检查
  • 自动化测试工作流

Prerequisites

环境要求:

  • Unity 6000+ (或其他支持版本)
  • Unity MCP 插件/包已安装
  • Python uvx 工具

1. 检查 MCP 插件是否安装

在 Unity 编辑器中检查:

  • 菜单栏是否有 MCPWindow → MCP
  • Project 窗口是否有 MCPMcpForUnity 相关文件夹

如果未安装 MCP 插件:

  1. 通过 Unity Asset Store 安装:

    • 打开 Window → Package Manager
    • 选择 Unity RegistryMy Assets
    • 搜索 "MCP""MCP for Unity"
    • 点击 Install 安装
  2. 或通过 Git URL 安装:

    • Package Manager → +Add package from git URL
    • 输入: https://github.com/anthropics/unity-mcp.git
    • 点击 Add
  3. 安装后重启 Unity

2. 检查 uvx 是否安装

# Windows
Test-Path "$env:USERPROFILE\.local\bin\uvx.exe"

# macOS/Linux
which uvx

如果未安装:

  1. 在 Unity 编辑器中打开 Window → MCP → Local Setup
  2. 点击 "Install""Setup Environment"
  3. 等待自动下载安装 uvx 和相关依赖
  4. 重启终端/IDE 以加载新的环境变量

插件来源:

  • Unity MCP Server: mcpforunityserver>=0.0.0a0

Deployment

1. 启动 MCP Server

检查 uvx 安装位置

uvx 通常安装在以下位置:

Windows:

# 标准安装路径
$env:USERPROFILE\.local\bin\uvx.exe
# 或
C:\Users\<用户名>\.local\bin\uvx.exe

# 检查是否存在
Test-Path "$env:USERPROFILE\.local\bin\uvx.exe"

macOS/Linux:

~/.local/bin/uvx
# 或
/usr/local/bin/uvx

如果 uvx 不存在

⚠️ 提示用户:

未找到 uvx 工具。请在 Unity 编辑器中:
1. 打开 Window → MCP → Local Setup
2. 点击 "Install Dependencies" 或 "Setup Local Environment"
3. 等待安装完成
4. 重新尝试启动 MCP Server

启动命令

Windows (动态路径):

$uvxPath = "$env:USERPROFILE\.local\bin\uvx.exe"
if (Test-Path $uvxPath) {
    & $uvxPath --prerelease explicit --from "mcpforunityserver>=0.0.0a0" mcp-for-unity --transport http --http-url http://localhost:8080 --project-scoped-tools
} else {
    Write-Host "错误: 未找到 uvx。请在 Unity 中点击 MCP → Local Setup 安装依赖。"
}

macOS/Linux:

~/.local/bin/uvx --prerelease explicit --from "mcpforunityserver>=0.0.0a0" mcp-for-unity --transport http --http-url http://localhost:8080 --project-scoped-tools

注意:

  • 首次启动会下载 Python 依赖(约 30MB,需要 1-2 分钟)
  • 保持运行,不要关闭终端
  • 使用 --project-scoped-tools 启用项目级工具

2. 连接流程

1. 初始化会话
   POST http://localhost:8080/mcp
   Headers: Accept: application/json, text/event-stream
   Body: {"jsonrpc":"2.0","id":1,"method":"initialize",...}
   ↓
2. 提取 Session ID (从响应头 mcp-session-id)
   ↓
3. 设置活动 Unity 实例
   ↓
4. 执行工具调用

PowerShell 示例:

$headers = @{
    "Content-Type" = "application/json"
    "Accept" = "application/json, text/event-stream"
    "mcp-session-id" = "your-session-id"
}

# 初始化
$init = '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"openclaw","version":"1.0"}}}'
$response = Invoke-WebRequest -Uri "http://localhost:8080/mcp" -Method Post -Headers $headers -Body $init
$sessionId = $response.Headers["mcp-session-id"]

# 设置活动实例
$setInstance = '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"set_active_instance","arguments":{"instance":"ProjectName@hash"}}}'

Common Operations

GameObject 管理

// 创建空物体
{
  "name": "manage_gameobject",
  "arguments": {
    "action": "create",
    "name": "MyObject",
    "position": [0, 0, 0]
  }
}

// 创建 Sprite 物体(2D)
{
  "action": "create",
  "name": "Tree2D",
  "position": [1, 2, 0]
}
// 然后添加 SpriteRenderer 组件

// 删除物体
{
  "action": "delete",
  "name": "MyObject"
}

Component 管理

// 添加组件
{
  "name": "manage_components",
  "arguments": {
    "action": "add",
    "target": "Tree2D",
    "component_type": "SpriteRenderer"
  }
}

// 设置属性 ⚠️ 注意类型格式
{
  "action": "set_property",
  "target": "Tree2D",
  "component_type": "SpriteRenderer",
  "property": "color",
  "value": {"r": 0.1, "g": 0.5, "b": 0.2, "a": 1.0}  // ✅ 对象格式
  // ❌ 错误: [0.1, 0.5, 0.2, 1]
}

Scene 管理

// 创建场景
{
  "name": "manage_scene",
  "arguments": {
    "action": "create",
    "name": "MyScene",
    "path": "MyFolder"
  }
}

// 保存场景
{
  "action": "save"
}

// 获取层级
{
  "action": "get_hierarchy",
  "page_size": 50
}

Asset 管理

// 创建文件夹
{
  "name": "manage_asset",
  "arguments": {
    "action": "create_folder",
    "path": "MyFolder"
  }
}

// 创建纹理
{
  "action": "create",
  "width": 64,
  "height": 64,
  "path": "MyFolder/Texture.png"
}

// 搜索资源
{
  "action": "search",
  "path": "MyFolder",
  "page_size": 50
}

Critical Data Types

⚠️ Color 格式

错误格式(数组):

"value": [0.1, 0.5, 0.2, 1.0]

正确格式(对象):

"value": {"r": 0.1, "g": 0.5, "b": 0.2, "a": 1.0}

PowerShell 构造:

$color = @{r=0.1; g=0.5; b=0.2; a=1.0} | ConvertTo-Json -Compress
# 结果: {"r":0.1,"g":0.5,"b":0.2,"a":1}

Vector3 格式

"position": [1, 2, 3]
"scale": [1.5, 2, 1]
"rotation": [0, 90, 0]

Common Issues & Solutions

Issue -1: MCP 插件未安装

症状:

  • Unity 菜单中没有 MCPWindow → MCP
  • Project 中没有 MCP 相关文件夹
  • 无法找到 MCP 设置界面

解决步骤:

  1. 打开 Unity Asset Store:

    • Window → Package Manager
    • 切换到 Unity Registry 标签
    • 搜索 "MCP""MCP for Unity"
  2. 安装插件:

    • 找到 MCP for Unity
    • 点击 Install
    • 等待安装完成
  3. 重启 Unity 编辑器

  4. 验证安装:

    • 检查菜单栏是否有 MCPWindow → MCP
    • 检查 Project 窗口是否有 MCP 文件夹

Issue 0: uvx 未找到 / 命令不存在

症状:

The term 'uvx' is not recognized as a cmdlet, function, operable program, or script file.
# 或
无法找到路径 "C:\Users\xxx\.local\bin\uvx.exe" 的一部分

原因:

  • uvx 是 Unity MCP 的依赖工具,尚未安装
  • 安装路径因系统/用户而异

解决步骤:

  1. 在 Unity 中安装:

    • 菜单: Window → MCP → Local Setup
    • 点击: Install DependenciesSetup Local Environment
    • 等待安装完成(可能需要几分钟)
  2. 验证安装:

    # Windows
    Get-Command uvx
    # 或
    Test-Path "$env:USERPROFILE\.local\bin\uvx.exe"
    
    # macOS/Linux
    which uvx
    
  3. 重启终端 以加载新的 PATH 环境变量

动态路径检测脚本:

function Get-UvxPath {
    # 尝试常见路径
    $paths = @(
        "$env:USERPROFILE\.local\bin\uvx.exe",
        "$env:LOCALAPPDATA\uv\uvx.exe",
        "C:\Program Files\uv\uvx.exe"
    )
    
    foreach ($path in $paths) {
        if (Test-Path $path) { return $path }
    }
    
    # 尝试从 PATH 查找
    $uvx = Get-Command uvx -ErrorAction SilentlyContinue
    if ($uvx) { return $uvx.Source }
    
    return $null
}

$uvxPath = Get-UvxPath
if (-not $uvxPath) {
    Write-Host "❌ 未找到 uvx。请在 Unity 中点击 Window → MCP → Local Setup 安装。"
    exit 1
}
Write-Host "✅ 找到 uvx: $uvxPath"

Issue 1: 无法设置 SpriteRenderer.sprite

症状:

Failed to convert value for property 'sprite' to type 'Sprite'

原因:

  • manage_texture 创建的是 Texture2D,但 SpriteRenderer 需要 Sprite 类型
  • API 不支持直接将路径字符串转为 Sprite 引用

解决方案:

  1. 手动方式(推荐):在 Unity 中将纹理拖到 SpriteRenderer 的 Sprite 字段,Unity 会自动转换
  2. 编辑器脚本:编写 Editor 文件夹下的工具脚本批量赋值
  3. 预创建 Sprite:使用 Unity 的 Sprite Editor 将纹理转为 Sprite 资源

Issue 2: Color 格式错误

症状:

Error converting token to UnityEngine.Color: Error reading JObject from JsonReader

解决: 使用对象格式 {"r":x,"g":y,"b":z,"a":w} 而非数组 [x,y,z,w]

Issue 3: Session 过期

症状:

Missing session ID
Bad Request: Missing session ID

解决:

  • 重新初始化获取新 Session ID
  • 确保每个请求都包含 mcp-session-id Header

Issue 4: Unity 实例未找到 / 找不到活跃实例

症状:

{
  "instance_count": 0,
  "instances": []
}

Active instance set to ... : false

原因:

  • MCP Server 已启动,但 Unity 编辑器尚未与 Server 建立连接
  • Unity 中的 MCP Session 未启动

解决步骤:

  1. 确保 Unity 编辑器已打开(且项目已加载)

  2. 在 Unity 中启动 MCP Session:

    • 菜单: Window → MCPMCP → Session
    • 在 MCP 窗口中找到 SessionConnection 部分
    • 点击 "Start Session""Connect" 按钮
    • 等待状态变为 "Connected""Running"
  3. 检查连接状态:

    • MCP 窗口应显示: Status: ConnectedTransport: HTTP
    • 或显示当前连接的 Server 地址: http://localhost:8080
  4. 重新获取实例列表:

    {
      "name": "resources/read",
      "params": {
        "uri": "mcpforunity://instances"
      }
    }
    

完整启动流程图:

用户机器
├─ [1] 启动 MCP Server (uvx 命令)
│     └─ 等待连接...
│
└─ [2] 打开 Unity 编辑器
       └─ [3] Window → MCP → Start Session
              └─ 建立连接
                     ↓
              MCP Server 检测到实例
                     ↓
              instance_count: 1

常见问题:

  • Q: 点击 Start Session 后没有反应?

    • 检查 MCP Server 是否正在运行(终端窗口是否还在)
    • 检查端口 8080 是否被占用
    • 尝试重启 Unity 和 MCP Server
  • Q: 显示 "Connection Failed"?

    • 确认 MCP Server 地址配置正确(默认: http://localhost:8080
    • 检查防火墙是否阻止了连接

Issue 5: 属性参数错误

症状:

Unexpected keyword argument 'xxx'

解决: 检查 API 文档,使用正确的参数名:

  • "component": "SpriteRenderer" → ✅ "component_type": "SpriteRenderer"
  • "filter": "All" → ✅ 不支持,省略或使用正确参数

Workflow Patterns

Pattern 1: 创建2D物体完整流程

1. 创建 GameObject (空物体)
   manage_gameobject: create
   
2. 添加 SpriteRenderer 组件
   manage_components: add, component_type=SpriteRenderer
   
3. 设置颜色
   manage_components: set_property, property=color, value={r,g,b,a}
   
4. 手动赋值 Sprite(API限制)
   或在 Unity 中拖拽纹理到 Sprite 字段

Pattern 2: 批量创建物体

$objects = @(
    @{name="Obj1"; pos=@(1,2,0); color=@{r=1;g=0;b=0;a=1}},
    @{name="Obj2"; pos=@(-1,1,0); color=@{r=0;g=1;b=0;a=1}}
)

foreach ($obj in $objects) {
    # 创建物体
    # 添加组件
    # 设置属性
}

Pattern 3: 错误检查流程

1. 执行操作
2. 检查控制台日志
   read_console: get
3. 验证结果
   manage_scene: get_hierarchy
4. 如有错误,读取具体组件信息
   resources/read: mcpforunity://scene/gameobject/{id}/components

API Limitations

限制说明变通方案
Sprite 赋值无法通过 API 直接设置 Sprite手动拖拽或编辑器脚本
纹理导入设置无法修改 Texture Import Settings预配置或在 Unity 中手动设置
复杂组件部分组件属性不支持使用 Unity 编辑器手动配置
脚本创建内容需转义使用简单脚本或模板

Best Practices

  1. 始终保存场景 在批量操作后执行 manage_scene: save
  2. 检查控制台 定期使用 read_console 查看错误
  3. 使用 Instance ID 操作具体物体时使用而非名称
  4. 批量操作 使用循环批量创建,减少 API 调用次数
  5. 错误处理 每个操作后检查 success 字段

Quick Reference

常用工具列表

ToolPurpose
manage_gameobjectCRUD GameObjects
manage_componentsAdd/remove/set components
manage_sceneScene operations
manage_assetAsset operations
manage_textureCreate textures
read_consoleGet Unity console logs
set_active_instanceSet target Unity instance

HTTP Headers (Required)

Content-Type: application/json
Accept: application/json, text/event-stream
mcp-session-id: <session-id>

Response Format

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [{
      "type": "text",
      "text": "{\"success\": true, ...}"
    }]
  }
}

References

Changelog

v1.0.0 (2026-02-11)

  • Initial release
  • Documented Color format issue
  • Documented Sprite assignment limitation
  • Added workflow patterns

Source

git clone https://github.com/Dqz00116/skill-lib/blob/main/unity-mcp/SKILL.mdView on GitHub

Overview

本技能覆盖 Unity MCP Server 的启动、连接与常用 API 操作(GameObject、Component、Scene、Asset),并讲解参数格式规范和故障排查思路。通过它,开发者可以实现 AI 控制 Unity 编辑器的自动化任务、批量场景对象创建/修改、远程调试与测试流程。

How This Skill Works

通过 MCP Server 提供的 JSON-RPC 接口实现操作。首先在本地通过 uvx 连接并启动服务,初始化会话并获取会话标识符,然后设置活动 Unity 实例并按需调用工具(如对 GameObject、Component、Scene、Asset 的操作)。首次启动会自动下载依赖,整个流程需在打开的终端持续运行。

When to Use It

  • 需要通过 AI 控制 Unity 编辑器执行自动化操作
  • 批量创建/修改场景物体、组件
  • 程序化生成资源或脚本
  • 远程调试和场景检查
  • 自动化测试工作流

Quick Start

  1. Step 1: 在 Unity 中安装 MCP 插件并通过 Local Setup 安装 uvx。
  2. Step 2: 使用 uvx 启动 MCP Server,确保 --project-scoped-tools 已启用并连接到 http://localhost:8080。
  3. Step 3: 通过示例 JSON-RPC 调用初始化会话,获取 mcp-session-id,设置活动实例后开始调用工具。

Best Practices

  • 确认 MCP 插件已安装并可在 Unity 菜单中看到 MCP 或 Window → MCP;若未安装,通过 Unity Asset Store 或 Git URL 安装后重启 Unity。
  • 在 Local Setup 中检查并安装 uvx,确保 uvx 位于系统 PATH 或 Unity 环境中可访问。
  • 使用正确的启动命令,确保 --project-scoped-tools 与 http 传输配置,并保持终端持续运行。
  • 在 API 调用中遵循正确的 JSON-RPC 结构,并妥善管理 mcp-session-id 与活动实例。
  • 对 GameObject/Component 的属性设置遵循参数格式规范(如 Color、Vector3 等类型)。

Example Use Cases

  • 通过 MCP 自动创建一个包含 SpriteRenderer 的树木对象和背景对象的场景。
  • 远程调试一个 Unity 场景,读取某个对象的位置和组件状态。
  • 批量修改多对象的 Transform 与组件属性以完成关卡布局。
  • 程序化生成资源如预制件、脚本并导出到 Unity 工程中。
  • 运行自动化测试工作流,验证场景渲染与对象层级正确性。

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers