Unity Skill技能使用说明
2026-04-01
新闻来源:网淘吧
围观:37
电脑广告
手机广告
Unity插件技能
通过约100个内置工具控制Unity编辑器。可在编辑器模式和播放模式下工作。
连接模式
1. OpenClaw网关(远程)
适用于Telegram、Discord和其他OpenClaw频道:

- Unity打开时自动连接
- 配置路径:窗口 → OpenClaw插件 → 设置
2. MCP桥接(本地)
适用于Claude Code、Cursor和本地AI工具:
- 启动路径:窗口 → OpenClaw插件 → MCP桥接 → 启动
- 默认端口:27182
- 添加到Claude Code:
claude mcp add unity -- node <路径>/MCP~/index.js
首次设置
如果unity_execute工具不可用,请安装网关扩展:
# From skill directory
./scripts/install-extension.sh
# Restart gateway
openclaw gateway restart
扩展文件位于extension/目录中。
install-extension.sh 的作用
# 1. Copies extension files from skill to gateway
# Source: <skill>/extension/
# Destination: ~/.openclaw/extensions/unity/
# 2. Files installed:
# - index.ts # Extension entry point (HTTP handlers, tools)
# - package.json # Extension metadata
# After installation, restart gateway to load the extension.
🔐 安全
此技能disableModelInvocation: true已设置为此值。
- AI不会自动调用工具
- 仅执行用户明确请求的操作
更改设置的方法请参考README.md。
快速参考
核心工具
| 类别 | 关键工具 |
|---|---|
| 场景 | scene.getActive、scene.getData、scene.load、scene.open、scene.save |
| 游戏对象 | gameobject.find,gameobject.getAll,gameobject.create,gameobject.destroy |
| Component | component.get,component.set,component.add,component.remove |
| Transform | transform.setPosition,transform.setRotation,transform.setScale |
| Debug | debug.hierarchy,debug.screenshot,console.getLogs |
| Input | 输入.点击界面,输入.类型,输入.按键,输入.鼠标点击 |
| 编辑器 | 编辑器.获取状态,编辑器.播放,编辑器.停止,编辑器.刷新 |
| 材质 | 材质.创建,材质.分配,材质.修改,材质.获取信息 |
| 预制件 | 预制件.创建,预制件.实例化,预制件.打开,预制件.保存 |
| 资源 | 资源.查找,资源.复制,资源.移动,资源.删除 |
| 包 | 包.添加,包.移除,包.列表,包.搜索 |
| 测试 | 测试.运行,测试.列表,测试.获取结果 |
常见工作流程
1. 场景检查
unity_execute: debug.hierarchy {depth: 2}
unity_execute: scene.getActive
2. 查找与修改对象
unity_execute: gameobject.find {name: "Player"}
unity_execute: component.get {name: "Player", componentType: "Transform"}
unity_execute: transform.setPosition {name: "Player", x: 0, y: 5, z: 0}
3. UI测试
unity_execute: input.clickUI {name: "PlayButton"}
unity_execute: input.type {text: "TestUser", elementName: "UsernameInput"}
unity_execute: debug.screenshot
4. 播放模式控制
unity_execute: editor.play # Enter Play mode
unity_execute: editor.stop # Exit Play mode
unity_execute: editor.getState # Check current state
unity_execute: editor.pause # Pause
unity_execute: editor.unpause # Resume
5. 材质创建
unity_execute: material.create {name: "RedMetal", color: "#FF0000", metallic: 0.8}
unity_execute: material.assign {gameObjectName: "Player", materialPath: "Assets/Materials/RedMetal.mat"}
unity_execute: material.modify {path: "Assets/Materials/RedMetal.mat", metallic: 1.0, emission: "#FF4444"}
6. 预设体工作流
unity_execute: prefab.create {gameObjectName: "Player", path: "Assets/Prefabs/Player.prefab"}
unity_execute: prefab.instantiate {prefabPath: "Assets/Prefabs/Player.prefab", x: 0, y: 1, z: 0}
unity_execute: prefab.open {path: "Assets/Prefabs/Player.prefab"}
unity_execute: prefab.save
unity_execute: prefab.close
7. 资产管理
unity_execute: asset.find {query: "Player", type: "Prefab"}
unity_execute: asset.copy {sourcePath: "Assets/Prefabs/Player.prefab", destPath: "Assets/Backup/Player.prefab"}
unity_execute: asset.move {sourcePath: "Assets/Old/Item.prefab", destPath: "Assets/New/Item.prefab"}
8. 包管理
unity_execute: package.list
unity_execute: package.search {query: "TextMeshPro"}
unity_execute: package.add {packageName: "com.unity.textmeshpro"}
unity_execute: package.add {gitUrl: "https://github.com/example/package.git"}
9. 测试运行
unity_execute: test.list {testMode: "EditMode"}
unity_execute: test.run {testMode: "EditMode", filter: "PlayerTests"}
unity_execute: test.getResults
10. 脚本执行(增强版)
# Debug logging
unity_execute: script.execute {code: "Debug.Log('Hello')"}
# Time manipulation
unity_execute: script.execute {code: "Time.timeScale = 0.5"}
# PlayerPrefs
unity_execute: script.execute {code: "PlayerPrefs.SetInt('score', 100)"}
# Reflection-based method calls
unity_execute: script.execute {code: "MyClass.MyMethod()"}
unity_execute: script.execute {code: "MyClass.MyStaticMethod('param1', 123)"}
工具类别(约100个工具)
控制台(3个工具)
console.getLogs- 获取日志(可选类型筛选:日志/警告/错误)console.getErrors- 获取错误/异常日志(可选包含警告)console.clear- 清除已捕获的日志
场景(7个工具)
scene.list- 列出构建设置中的场景scene.getActive- 获取活动场景信息scene.getData- 获取完整层级数据scene.load- 按名称加载场景(游戏模式)scene.open- 在编辑模式下打开场景scene.save- 保存活动场景(编辑模式)scene.saveAll- 保存所有打开的场景(编辑模式)
GameObject(8个工具)
gameobject.find- 按名称、标签或组件查找gameobject.getAll- 获取所有GameObject(可筛选)gameobject.create- 创建对象或基本体(立方体、球体等)gameobject.destroy- 销毁对象gameobject.delete- 删除对象(destroy的别名)gameobject.getData- 获取详细数据gameobject.setActive- 启用/禁用gameobject.setParent- 更改层级关系
变换组件 (6个工具)
transform.getPosition- 获取世界坐标位置 {x, y, z}transform.getRotation- 获取欧拉旋转角度 {x, y, z}transform.getScale- 获取局部缩放 {x, y, z}transform.setPosition- 设置世界坐标位置 {x, y, z}transform.setRotation- 设置欧拉旋转角度transform.setScale- 设置局部缩放
组件 (5个工具)
component.add- 按类型名称添加组件component.remove- 移除组件component.get- 获取组件数据/属性component.set- 设置字段/属性值component.list- 列出可用组件类型
脚本 (3 个工具)
script.execute- 执行代码:Debug.Log、Time、PlayerPrefs、反射调用script.read- 读取脚本文件script.list- 列出项目脚本
应用程序 (4 个工具)
app.getState- 获取播放模式、FPS、时间app.play- 进入/退出播放模式app.pause- 切换暂停app.stop- 停止播放模式
调试 (3 个工具)
debug.log- 写入控制台debug.screenshot- 截取屏幕截图debug.hierarchy- 文本层级视图
编辑器 (9个工具)
editor.refresh- 刷新资源数据库(触发重新编译)editor.recompile- 请求脚本重新编译editor.domainReload- 强制域重新加载editor.focusWindow- 聚焦窗口(游戏/场景/控制台/层级/项目/检视器)editor.listWindows- 列出打开的窗口editor.getState- 获取编辑器状态editor.play- 进入播放模式editor.stop- 退出播放模式editor.pause/editor.unpause- 暂停控制
输入模拟(10个工具)
input.keyPress- 按下并释放按键input.keyDown/input.keyUp- 按住/释放按键input.type- 在字段中输入文本input.mouseMove- 移动光标input.mouseClick- 在指定位置点击input.mouseDrag- 拖拽操作input.mouseScroll- 滚动滚轮input.getMousePosition- 获取光标位置input.clickUI- 通过名称点击UI元素
材质(5个工具)- v1.5.0 新增
material.create- 创建带有着色器、颜色、金属度、平滑度的材质material.assign- 将材质分配给游戏对象material.modify- 修改材质属性(颜色、金属度、自发光)material.getInfo- 获取包含所有着色器属性的详细材质信息material.list- 列出项目中的材质(支持筛选)
预制件(5个工具)- v1.5.0 版本新增
prefab.create- 从场景游戏对象创建预制件prefab.instantiate- 在场景中按指定位置实例化预制件prefab.open- 打开预制件进行编辑prefab.close- 关闭预制件编辑模式prefab.save- 保存当前编辑的预制件
资源(7个工具)- v1.5.0 版本新增
asset.find- 按查询、类型、文件夹搜索资源asset.copy- 将资源复制到新路径asset.move- 移动/重命名资源asset.delete- 删除资源(含回收站选项)asset.refresh- 刷新资源数据库asset.import- 导入/重新导入特定资源asset.getPath- 按名称获取资源路径
包管理器(4个工具)- v1.5.0版本新增
package.add- 通过名称或git URL安装包package.remove- 移除已安装的包package.list- 列出已安装的包package.search- 搜索Unity包注册表
测试运行器(3个工具)- v1.5.0版本新增
test.run- 运行编辑模式/播放模式测试,并支持过滤test.list- 列出可用测试test.getResults- 获取最近一次测试运行结果
批量执行 (1个工具) - v1.6.0 版本新增
batch.execute- 单次调用执行多个工具(性能提升10-100倍)commands: 由 {tool, params} 对象组成的数组stopOnError: 在首个错误处停止(默认值:false)
会话 (1个工具) - v1.6.0 版本新增
session.getInfo- 获取会话信息(项目、进程ID、机器名、会话ID)
ScriptableObject (6个工具) - v1.6.0 版本新增
scriptableobject.create- 创建新的 ScriptableObject 资源scriptableobject.load- 加载并检查 ScriptableObject 字段scriptableobject.save- 保存ScriptableObject的更改scriptableobject.getField- 获取特定字段的值scriptableobject.setField- 设置字段值并自动保存scriptableobject.list- 列出项目中的ScriptableObjects
着色器(3个工具)- v1.6.0版本新增
shader.list- 列出项目中的着色器shader.getInfo- 获取着色器的属性和信息shader.getKeywords- 获取着色器关键词
纹理(5个工具)- v1.6.0版本新增
texture.create- 创建带有颜色填充的新纹理texture.getInfo- 获取纹理信息(大小、格式、导入设置)texture.setPixels- 用颜色填充区域texture.resize- 通过导入设置调整纹理大小texture.list- 列出项目中的纹理
自定义工具 API - v1.6.0
注册项目特定工具:
OpenClawCustomTools.Register(
"mygame.getScore",
"Get current score",
(args) => new { success = true, score = GameManager.Score }
);
MCP 资源 - v1.6.0
通过 MCP 资源 URI 访问 Unity 数据:
| URI | 描述 |
|---|---|
unity://scene/hierarchy | 场景层级结构 |
unity://scene/active | 活动场景信息 |
unity://project/scripts | 脚本列表 |
unity://project/scenes | 场景列表 |
unity://editor/state | 编辑器状态 |
unity://console/logs | 控制台日志 |
unity://session/info | 会话信息 |
技巧
截图模式
- 播放模式:
屏幕捕获- 包含所有UI叠加层 - 编辑器模式:
Camera.main.Render()- 无叠加UI - 使用
{method: "camera"}进行仅摄像机捕获
查找对象
gameobject.find {name: "Player"} # By exact name
gameobject.find {tag: "Enemy"} # By tag
gameobject.find {componentType: "Camera"} # By component
gameobject.getAll {activeOnly: true} # All active objects
脚本重新编译
代码更改后,Unity可能不会自动重新编译。请使用:
editor.refresh # Full asset refresh + recompile
播放模式切换
- 插件通过SessionState在播放模式切换期间保持存活
- 如果连接丢失,请等待自动重连或使用 窗口 → OpenClaw插件 → 设置 → 连接
MCP桥接器使用
用于Claude Code / Cursor集成:
- 启动:窗口 → OpenClaw插件 → MCP桥接器 → 启动
- 注册:
claude mcp add unity -- node /path/to/MCP~/index.js - 验证:
curl http://127.0.0.1:27182/status
输入模拟限制
键盘/鼠标模拟适用于UI交互但不适用于Input.GetKey()。对于游戏玩法测试:
- 使用
transform.setPosition直接移动对象 - 或迁移到Unity的新输入系统
故障排除
| 问题 | 解决方案 |
|---|---|
| 工具超时 | 检查Unity是否响应,尝试editor.getState |
| 网关无连接 | 检查Window → OpenClaw插件 → 设置 |
| MCP无连接 | 启动MCP桥接器,验证端口27182 |
| 脚本未更新 | 使用editor.refresh强制重新编译 |
| 错误的截图 | 使用游戏模式查看带UI的游戏视图 |
| MCP 504 超时 | Unity繁忙或MCP桥接器未启动 |
| 未找到测试运行器 | 安装com.unity.test-framework包 |
链接
- 技能仓库: https://github.com/TomLeeLive/openclaw-unity-skill
- 插件仓库: https://github.com/TomLeeLive/openclaw-unity-plugin
- OpenClaw 文档: https://docs.openclaw.ai
- MCP 设置指南:参见插件仓库 → 文档~/SETUP_GUIDE.md
许可证
MIT许可证 - 详见LICENSE文件
文章底部电脑广告
手机广告位-内容正文底部


微信扫一扫,打赏作者吧~