想用插件来保存一下prefab,消息管理器里有这个接口:await Editor.Message.request(‘asset-db’, ‘save-asset’, urlOrUUID, content);但是content应该传什么数据呢?文档是一点儿也找不着信息,求大佬指点,万分感谢~
补充一下:在消息调试工具中没有显示save-asset 的消息,这是为什么呢?
content 是通过 cce.Utils.serialize 序列化后的 json 格式的数据
你可以先获取场景或者节点对象,然后在场景进程使用
const json = cce.Utils.serialize(asset);
await Editor.Message.request(‘asset-db’, ‘save-asset’, urlOrUUID, json);
进行存储
感谢大佬回复,顺便问一下,cce是什么?为什么我的脚本里找不到呀?求告知~再次感谢大佬
cce 是编辑器环境下才有的全局对象,里面封装了一些与编辑器相关的 api
明白了,非常感谢大佬回复
3.8.5 cce.Utils.serialize 会报错 cce找不到 另外这个asset怎么获取
cce 对象只在场景进程才有
asset 如何获取,看要你是通过什么获取,
1.如果是已经知道 asset 的 uuid 可以通过发送 db 消息请求,具体的可以点击编辑器主菜单 开发者/消息列表 菜单,打开消息管理器
2.如何是选中 asset,先通过下方 api 得到 uuid,在去跟 db 请求
const assetUuid = Editor.Selection.getLastSelected(‘asset’);
我看到一个query-asset-info 查出来的数据 感觉和预制的数据不对啊
预制数据,你需要通过 fs 的 api 读取内容,然后进行实例化
let fs = require('fs-extra')
let info = await Editor.Message.request('asset-db', 'query-asset-info', '582942fe-e8df-414c-b0ad-05039828521c');
let content = fs.readJsonSync(info.file, 'utf8');
let obj = cce.Utils.serialize(content);
console.log(obj);
你好,我用的是3.8.3,在插件里引用cce.Utils行代码,提示"Cannot find name ‘cce’.ts(2304)",请问这个问题应该怎么处理?
这个是要在场景进程中使用的,可以查看这个文档https://docs.cocos.com/creator/3.8/manual/zh/editor/extension/scene-script.html
之前的插件可以获取到节点对象,直接调用addComponent方法,现在给废除了吗,都改成了Message.request操作
之前获取的节点对象的写法,发一下我看看,不过一般都是在场景进程中获取的
let selectNodeUuid = Editor.Selection.curSelection("node");
let node = cc.engine.getInstanceById(selectNodeUuid);
if(!node) {
Editor.log("请先选择一个节点");
return;
};
let obj = {x: 0,y: 0,scale: 1,active: true};
const nodeName = node.name;
const pos = node.getPosition();
[obj.x,obj.y] = [pos.x,pos.y];
obj.scale = node.scale;
obj.active = node.active;
const sprite = node.getComponent(cc.Sprite);
这个现在也可以,只是说是在场景进程做的,然后再序列化成字符串,存到 prefab
这个API在场景进程中也是有的吗我试试
哦,不对,这个要看 engine 有没有这个 api
OK,感谢
你可以改成 cce.Node.query(nodeUUID)