把 DSH 变成一个能直接操作 3D 编辑器、并且能自己验证结果的 Agent——不是"给建议让用户去点",而是真的把场景搭出来、把脚本写上、把组件挂上、把 UI 建出来,再自己跑起来看对不对,不对就改。
TvE Hub 的「开发者服务」是一个本地 TCP 控制服务器,同一端口还提供 MCP 端点
域方法本次实际用它做了什么
编辑器editor.state / state.snapshot / state.restore拿到当前工程、场景、脏状态、选中项工程project.list/open/close/create/build确认工作区;project.build 可出网页/微信产物场景scene.list/open/save/write/tree读全树、改结构后落盘节点node.add/remove/rename/set/select从 GLB 建 80 个模型节点、分组、摆位/旋转/缩放、清掉旧内容组件node.component.add/set挂 5 个脚本组件、enabled 开关、调属性资产asset.list/read/write/create/delete/rename列 43 个模型、写 5 个 .ts 脚本预览preview.open/close/start/stop/screenshot导出真实运行时产物 + 截图核验检索file.index/search/module定位代码/资产
覆盖了从资产 → 场景 → 逻辑 → UI → 预览/构建的整条链路。
搭场景:量 43 个 GLB 的包围盒与坡面朝向 → 按 1×1 模块逐格拼出滑板公园(66 个实体障碍)
写逻辑:VirtualJoystick / CameraFollow / SkateBoyControl / SkateGirlNPC / SceneCollision 五个脚本
挂接:node.component.add 把脚本绑到男孩/女孩/相机/摇杆,UI Canvas 下建摇杆、提示、下板按钮、对话框
验证:导出预览 → 无头 Edge 走 CDP 驱动真实运行时(合成摇杆指针、抓 console、截图)→ 根据实测数值改代码
迭代:朝向反了、方向不对、穿模、NPC 被台阶卡住——全都是靠这套闭环定位并修掉的
典型的一次调试:摇杆四方向探针打出 z 4→3.32→1.85→0.32,一眼看出位移被多转了一次 yaw;碰撞测试打出 z 4.00→2.28 停住,证明推出解算生效。
手段收获从 TvE Hub.exe 里提取出内嵌的 26 篇完整文档sdk/*.md、editor/*.md——API 语义、生命周期、远程方法表全都有,不用猜直接读导出的引擎运行时源码(.tmp/web-preview/engine/**/*.mjs)抓到 translate() 其实只是 position += (x,y,z)(父坐标系),文档没说清,靠这个定位了移动方向 bug反解 GLB 几何量包围盒做碰撞表、读动画剪辑名(35 个)、采样 colormap 判断"红色男孩"、侧视确认车头在 −X无头浏览器 + DevTools 协议Hub 没有"读控制台"的接口,就绕到真实预览页里抓异常/日志、合成指针输入——ReferenceError: property is not defined 就是这么挖出来的内存树 vs 磁盘树逐字段 diff发现 scene.save 漏写了尾部 2 个节点(重存一次才对),以及 UI Canvas 被设成隐藏、动作面板组件被禁用
没有读控制台的远程方法:脚本报错只能靠浏览器侧或"内存/磁盘 diff"间接发现
preview.screenshot 拍的是编辑器画布,不是运行中的预览;真正的运行时验证得自己驱动浏览器
写操作不是原子的:scene.tree 会比写入滞后,scene.save 可能丢尾部队列,需要"重发 + 复核"
.mat 不能 asset.write 直写,得走 asset.create + 磁盘改色热重载
运行时写入不落盘:所以没法用 scene.tree 观察脚本跑出来的中间状态,得靠日志或插桩
脚本相对 import 必须写 .js 后缀(from "./X.js"),否则浏览器 404 且整个 import 图连带失效
物理组件不能运行时创建;本项目物理本身是关的,碰撞只能脚本层做
它把"AI 辅助做 3D 内容"从"生成一段代码给你贴"提升到了"端到端交付并自证":
我可以在这个工程里建场景、写脚本、挂组件、做 UI、导出预览、自己操作角色跑一遍、看数值和截图、发现不对再改——整个过程不需要你点一下编辑器。
前提是补上三件套:一个 TCP 客户端、一份可读的引擎/文档真源、一个能驱动真实运行时的浏览器。这三件补齐后,TvE Hub 就相当于给 Agent 开了一个完整的 3D 编辑器 API,而不只是一个聊天窗口。