我想做一个插件:功能如下:
一个MainScene场景,里面有个@property({type:[cc.Prefab]}) templates: cc.prefab[] = [];
点击插件的生成按钮,就会把prefab放到脚本里面的一个属性里了,类似拖动prefab到inspector里面了
祝你好运…
先拿到prefab uuid,然后在场景脚本获取你要放的脚本,load({type:uuid,uuid:xxx})获取资源后赋值给他试试可不可以
我大致实现了一下是可以的,我是先拿到的prefab的uuid,
代码类似这样:
const loadPrefab = (dbUrl,uuid,templates,comName,index,hornNode,realNode) => {
// 加载prefab资源
return new Promise((resolve,reject) => {
cc.loader.load({uuid},async (err,res) => {
if(err) {
reject();
return;
}
// let resNode = cc.instantiate(res);
if(templates.indexOf(res) < 0) {
templates.push(res);
if(comName === "emptyTemplateController" || comName === "clickTemplateController") {
sceneTemplates[index] = {__uuid__: ""};
} else {
sceneTemplates[index] = {__uuid__: uuid};
}
}
if(res) {
Editor.log("com is ",res.data.getComponent(comName)," and active is ",res.data.active);
res.data.active = true;
if(!res.data.getComponent(comName)) {
res.data.addComponent(comName);
// 刷新资源
await new Promise((resolveIn,rejectIn) => {
Editor.assetdb.saveExists(dbUrl,res.serialize(),() => {
resolveIn();
})
});
Editor.assetdb.refresh(dbUrl,() => {
Editor.log("资源刷新完成");
resolve();
});
} else {
resolve();
}
}
});
})
}
最后需要刷新一下编辑器