Unity Tools
Unity Tools 是 Codely CLI 内置的 实时 Unity Editor 控制工具集,通过直接 TCP Socket 连接到运行中的 Unity Editor,对场景、GameObject、脚本、资产、烘焙等进行读写操作。
与 Unity Insight(基于索引的只读分析)不同,Unity Tools 直接操控 实时运行 的 Unity Editor,支持创建、修改、删除等写操作。
| 属性 | 说明 |
|---|---|
| 工具数量 | 17 个核心工具 + 1 个刷新工具(unity_refresh),共 18 个 |
| 连接方式 | 直接 TCP Socket(非 MCP 协议) |
| 默认端口 | 25916 |
| 配置文件 | .com-unity-codely.json(项目根目录) |
| 注册位置 | UnityToolsManager + UnityRefreshTool |
| 前提条件 | Unity Editor 需运行并安装 Codely Bridge 包 |
连接管理
配置文件
Unity Tools 通过 .com-unity-codely.json 配置文件自动检测 Unity 项目。该文件由 Unity Editor 中的 Codely Bridge 包自动生成。
{
"unity_port": 25916,
"unity_host": "localhost",
"created_date": "2025-09-17T06:45:29Z",
"project_path": "E:/UnityProject/Assets",
"reloading": false,
"reason": "ready",
"seq": 1,
"last_heartbeat": "2025-09-17T09:09:29Z"
}
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
unity_port | number | 是 | TCP 端口 |
unity_host | string | 否 | 主机地址,默认 localhost |
created_date | string | 否 | 创建时间 |
project_path | string | 否 | Unity 项目 Assets 路径 |
reloading | boolean | 否 | Unity 是否正在重载 |
reason | string | 否 | 当前状态原因 |
seq | number | 否 | 序列号 |
last_heartbeat | string | 否 | 最后心跳时间 |
自动检测行为
- 配置文件存在:Codely 自动使用指定端口连接
- 无配置文件:Codely 正常运行,不启用 Unity 集成
- 配置无效:记录警告,继续运行不启用 Unity 集成
配置文件查找:从当前目录开始 向上遍历目录树,直到找到配置文件或到达文件系统根。
CLI 连接命令
在 CLI 中使用 /upm 斜杠命令管理连接:
| 命令 | 说明 |
|---|---|
/upm status | 查看连接状态和工具数量 |
/upm refresh | 重新读取 .com-unity-codely.json 并重连(不接受端口参数) |
/upm install | 安装/更新 Codely Bridge 包到当前 Unity 项目 |
自动连接流程
Codely CLI 启动时,对于包含 .com-unity-codely.json 的工作区:
- 读取
.com-unity-codely.json获取端口 BuiltinUpmManager.getInstance()创建 TCP 客户端UnityTcpClient.getInstance()建立连接(单例模式,host/port 从配置文件读取)- 连接成功后调用
UnityIntegrationService.onUpmConnected() UnityToolsManager.registerTools(toolRegistry)注册 17 个工具UnityRefreshTool.register(toolRegistry)注册刷新工具- 注入 Unity 系统提示
工具总览
核心工具(17 个,由 UnityToolsManager 注册)
| # | 工具名 | 类 | Unity 命令 | 说明 |
|---|---|---|---|---|
| 1 | unity_editor | ManageEditorTool | manage_editor | 编辑器状态、编译、Play 控制、标签/层 |
| 2 | unity_workflow | UnityWorkflowTool | manage_workflow | 高级工作流压缩 |
| 3 | unity_scene | ManageSceneTool | manage_scene | 场景管理 |
| 4 | unity_gameobject | ManageGameObjectTool | manage_gameobject | GameObject 和组件操作 |
| 5 | unity_console | ReadConsoleTool | read_console | 控制台消息读取/清除 |
| 6 | unity_script | ManageScriptTool | manage_script | C# 脚本 CRUD |
| 7 | unity_shader | ManageShaderTool | manage_shader | 着色器管理 |
| 8 | unity_asset | ManageAssetTool | manage_asset | 资产管理 |
| 9 | unity_package | ManagePackageTool | manage_package | UPM 包管理 |
| 10 | unity_bake | ManageBakeTool | manage_bake | NavMesh/光照烘焙 |
| 11 | unity_ui_toolkit | ManageUIToolkitTool | manage_ui_toolkit | UI Toolkit 资产 |
| 12 | unity_menu | ExecuteMenuItemTool | execute_menu_item | 菜单项执行 |
| 13 | unity_screenshot | ScreenShotTool | manage_screenshot | 截图 |
| 14 | unity_gameview | ManageGameViewTool | manage_gameview | Game View 分辨率 |
| 15 | unity_input | ManageInputTool | manage_input | 模拟输入 |
| 16 | execute_custom_tool | ExecuteCustomTool | (自定义) | 执行自定义工具 |
| 17 | execute_csharp_script | ExecuteCSharpScript | (C# 脚本) | 执行 C# 脚本(内联代码或文件路径) |
额外工具(单独注册)
| # | 工具名 | 类 | 说明 |
|---|---|---|---|
| 18 | unity_refresh | UnityRefreshTool | 重新读取配置并重连 TCP(参数为空 {}) |
工具详解
unity_editor — 编辑器控制
控制 Unity 编辑器状态(播放/暂停/停止)、检索项目信息、管理编译、窗口、选择、标签和层。
必填参数: action
| Action | 说明 | 关键参数 |
|---|---|---|
get_current_state | 获取完整 UnityCurrentState 状态快照 | — |
request_compile | 请求编译(返回 op_id) | — |
start_compilation_pipeline | 启动编译流水线(返回 op_id + since_token) | — |
wait_for_compile | 等待编译完成 | op_id(必填)、timeoutSeconds(默认 60) |
get_compilation_summary | 获取编译摘要 | — |
wait_for_idle | 等待编辑器空闲 | timeoutSeconds(默认 600) |
play / pause / stop | Play Mode 控制 | — |
get_state | 获取状态(同 get_current_state) | — |
get_project_root | 获取项目根路径 | — |
get_windows | 获取打开的窗口列表 | — |
get_active_tool | 获取当前激活工具 | — |
set_active_tool | 设置编辑器工具 | toolName(View, Move, Rotate, Scale, Rect, Transform, Pan) |
get_selection | 获取当前选择 | — |
focus_window | 聚焦窗口 | windowType(Console, Inspector, Hierarchy, Project, Scene, Game 等) |
ensure_tag / add_tag / remove_tag / get_tags | 标签管理 | tagName(1-255 字符) |
ensure_layer / add_layer / remove_layer / get_layers | 层管理 | layerName(≥1 字符) |
限制:
request_compile和start_compilation_pipeline在 Play/Paused 模式下被阻止(错误码compile_blocked_in_play_mode)。最多 32 个层(8 个内置 + 24 个用户槽位 8-31)。ensure_tag/ensure_layer为幂等操作。
unity_workflow — 高级工作流
将常见多步骤模式压缩为单次工具调用。
必填参数: action
| Action | 等价操作 | 说明 |
|---|---|---|
init_session | get_current_state → console.clear(返回 sinceToken)→ wait_for_idle | 初始化会话 |
compile_and_validate | start_compilation_pipeline(返回 op_id + since_token)→ wait_for_compile(op_id) → console.get(since_token)(返回 hasErrors/hasWarnings) | 编译并验证 |
checkpoint | ensure_scene_saved → 可选截图 | 检查点保存 |
install_package_and_validate | 安装 UPM 包并验证编译 | id_or_url(必填)、version、screenshot(默认 true)、screenshotAction、screenshotPath、screenshotFilename、timeoutSeconds |
unity_scene — 场景管理
管理场景的创建、加载、保存、层级查看和构建设置。
必填参数: action
| Action | 说明 | 关键参数 |
|---|---|---|
ensure_scene_open | 确保场景已打开(幂等) | name、path(默认 Assets/Scenes/) |
ensure_scene_saved | 确保场景已保存(幂等) | — |
create | 创建新场景 | name、path(默认 Assets/Scenes/) |
load | 加载场景 | name 或 build_index |
save | 保存当前场景 | — |
get_hierarchy | 获取场景层级 | — |
get_active | 获取当前活动场景信息 | — |
get_build_settings | 获取构建设置 | — |
注意: Unity 引擎使用
.unity扩展名;Tuanjie 引擎使用.scene扩展名。搜索场景文件时需同时检查*.unity和*.scene。
unity_gameobject — GameObject 管理
对 GameObject 进行创建、修改、删除、查找、子级列举和组件管理。
必填参数: action
| Action | 说明 |
|---|---|
create_batch | 批量创建(最多 10 个操作,支持 captureAs + $alias 引用) |
edit_batch | 批量编辑(查找后写入,0 匹配时提前停止返回成功) |
ensure_component | 确保组件存在(幂等) |
ensure_renderer_material | 确保渲染器材质(幂等) |
ensure_mesh_collider_mesh | 确保网格碰撞器网格(幂等) |
ensure_prefab_default_sprite |