插件如何通知资源管理器打开指定的Prefab

类似于在资源管理器中双加Prefab的逻辑,如何在插件代码中调用

1赞

在商店里面 资源引用查询 的的插件,找到了这个函数,对于Prefab不适用

The asset uuid is not a scene

好像只能打开scene

可以通过发送下面的消息,打开 prefab 编辑模式。

Editor.Ipc.sendToAll('scene:enter-prefab-edit-mode', '7e977c15-ba64-4b07-8187-1bbf59fbc9fe');

对应资源的 uuid 可以通过 assetDB 获取

Editor.assetdb.queryUuidByUrl('db://assets/dead.prefab', (error, uuid) => {) });
1赞

惊现大佬

1赞

scene:open-by-uuid消息发送后,会自动选中场景下的该uuid的资源
scene:enter-prefab-edit-mode,不能像前者这样,请问怎么实现前者跳转选中的效果吗

自己通过scene-walk去查询Prefab根节点的uuid,然后发送该消息接口选中你想要的节点

 Editor.Selection.select('node', uuid, !0, !0);

3q,谢谢大佬

请问打开prefab后的回调应该怎么传入,或者怎么能知道这个prefab在编辑器中已经加载完毕?

大佬,能否说详细点,我用你这个方案,只能选中场景中的节点,我想选中预制体编辑模式下的节点要怎么写啊?求教!

你是想要选中层级管理器里面的某个节点么?

是的,预制体编辑模式下的层级和场景层级好像不是同一个,我的scene-walk是怎么写的,arg传的Path,就是我要选择的节点在预制体中的路径,结果就是选择了场景层级中的节点,我想实现的是先用scene:enter-prefab-edit-mode打开预制体编辑模式,再选中层级的节点

module.exports = { 'select-node-by-path': function (event, arg) { var node = cc.find(arg); if (node) Editor.Selection.select('node', node.uuid, !0, !0); }};

教你一个办法:层级管理器面板叫做 hierarchy
如图打开devtools,搜索,会看到面板的index.js,一般面板的消息就是在messaes里面,也就是说,你可以使用这个消息,虽然官方没有公布!

从图中看到有很多消息可以使用,那么选中节点可能就是 ‘selection:activated’
那么怎么使用呢?

Editor.Ipc.sendToPanel("hierarchy","selection:activated",[uuid], callback);

至于参数,我可能写的不是很准确,但是你可以通过debug获得

1赞

@xu_yanfeng
测试发现用scene-walk去查询Prefab的子节点的uuid跟直接从层级管理器右键属性"显示节点UUID和路径"打印的uuid不一致;
而且每次打开prefab后,其子节点的uuid都会变化;通过文本编辑器打开prefab后发现cc.Node的_id属性是""(跟场景文件fire不一样,场景文件下的节点cc.Node的_id是有值的)。
所以也就没办法用这个方法选中打开的预制的子节点: Editor.Selection.select(‘node’, uuid, !0, !0);

你这个Creator的版本不一样把,为啥我这里看不到里面的代码?