网淘吧来吧,欢迎您!

Unity Skill技能使用说明

2026-04-01 新闻来源:网淘吧 围观:37
电脑广告
手机广告

Unity插件技能

通过约100个内置工具控制Unity编辑器。可在编辑器模式和播放模式下工作。

连接模式

1. OpenClaw网关(远程)

适用于Telegram、Discord和其他OpenClaw频道:

Unity Skill

  • 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.getActivescene.getDatascene.loadscene.openscene.save
游戏对象gameobject.find,gameobject.getAll,gameobject.create,gameobject.destroy
Componentcomponent.get,component.set,component.add,component.remove
Transformtransform.setPosition,transform.setRotation,transform.setScale
Debugdebug.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集成:

  1. 启动:窗口 → OpenClaw插件 → MCP桥接器 → 启动
  2. 注册:claude mcp add unity -- node /path/to/MCP~/index.js
  3. 验证: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

链接

许可证

MIT许可证 - 详见LICENSE文件

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏

文章底部电脑广告
手机广告位-内容正文底部

相关文章

您是本站第393623名访客 今日有1篇新文章/评论