feat(mcp-bridge): 添加场景和节点创建功能

- 新增 getNewSceneTemplate 函数用于生成标准场景模板
- 实现 create_scene 工具用于在 assets 目录下创建新场景文件
- 实现 create_prefab 工具用于将节点保存为预制体资源
- 实现 open_scene 工具用于在编辑器中打开指定场景
- 实现 create_node 工具用于在当前场景中创建新节点
- 在 scene-script.js 中添加 create-node 处理逻辑
- 支持创建不同类型的节点(空节点、精灵、标签等)
- 添加 UUID 生成的多种兼容方案
```
This commit is contained in:
火焰库拉
2026-01-29 14:26:28 +08:00
parent 1af6f08c94
commit f901bcc38f
2 changed files with 225 additions and 4 deletions

View File

@@ -88,4 +88,55 @@ module.exports = {
if (event.reply) event.reply(new Error("Node not found"));
}
},
"create-node": function (event, args) {
const { name, parentId, type } = args;
const scene = cc.director.getScene();
let newNode = null;
// 特殊处理:如果是创建 Canvas自动设置好适配
if (type === "canvas" || name === "Canvas") {
newNode = new cc.Node("Canvas");
let canvas = newNode.addComponent(cc.Canvas);
newNode.addComponent(cc.Widget);
// 设置默认设计分辨率
canvas.designResolution = cc.size(960, 640);
canvas.fitHeight = true;
// 自动在 Canvas 下创建一个 Camera
let camNode = new cc.Node("Main Camera");
camNode.addComponent(cc.Camera);
camNode.parent = newNode;
} else if (type === "sprite") {
newNode = new cc.Node(name || "New Sprite");
newNode.addComponent(cc.Sprite);
} else if (type === "label") {
newNode = new cc.Node(name || "New Label");
let l = newNode.addComponent(cc.Label);
l.string = "New Label";
} else {
newNode = new cc.Node(name || "New Node");
}
// 设置层级
let parent = parentId ? cc.engine.getInstanceById(parentId) : scene;
if (newNode) {
newNode.parent = parent;
// 坐标居中处理(如果是 Canvas 子节点)
if (parent.name === "Canvas") {
newNode.setPosition(0, 0);
} else {
newNode.setPosition(cc.v2(cc.winSize.width / 2, cc.winSize.height / 2));
}
// 通知编辑器刷新
Editor.Ipc.sendToMain("scene:dirty");
Editor.Ipc.sendToAll("scene:node-created", {
uuid: newNode.uuid,
parentUuid: parent.uuid,
});
if (event.reply) event.reply(null, newNode.uuid);
}
},
};