3.8.x版本中,'save-asset' 保存prefab时,数据如何序列化?

想用插件来保存一下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)

1赞