深度使用插件开发问题汇总

*【bug】*1.package.json里面修改内容如增加快捷键或者message需要重启编辑器,cmd+r刷新不起作用

*【bug】*2.在插件界面 cmd+r不能刷新插件界面,提示 Invalid URL

3.从编辑器拖动资源导面板上的时候,面板层级会调整隐藏到编辑器后面,拖动资源比较麻烦

4.面板样式表需要数组,目前一个样式表有点鸡肋,增加element-plus样式到时候,就不可用了,由于加载优先级关系,需要default/index.css覆盖element-plus,所以default/index.css也要改成动态加载在后面。

5.open-asset打开prefab后不知道root节点的name和uuid,获取不到root节点实例,如何才能获取到

6.节点树右键菜单没有找到怎么用(已解决)
7.api使用上不够友好,调试比较费时间,unity从学习到完成1天,cocos从学习插件api/vue这些到message到调用,总共用了一周
8. 打开插件面板到速度太慢了,用快捷键打开到时候按了感觉没反应,过一会才弹出来
9.执行批量操作很容易触发
[Window] SceneFacadeManager.executeSceneScriptMethod timeout.
可以增加一个超时时间设置
10.找不到api,比方 Editor.UI.File.resolveToRaw, Editor.UI.File.resolveToUrl
*【bug】*11.Editor.Message.request(‘asset-db’, ‘open-asset’, urlOrUUID);这个接口执行await后,返回时机上有问题,立即是获取不到节点,在prefab没打开之前就返回了
*【bug】*12. Editor.Message.request(‘scene’, ‘create-node’, options) 这个接口参数 * @param options.unlinkPrefab? {boolean} 是否要解绑为普通节点
不生效,创建的prefab不能link prefab

  1. 在修改 package.json 文件后需要重启编辑器以使更改生效,简单的刷新操作(cmd + r)并不能生效。
  2. 当在插件界面使用 cmd + r 时,可能会遇到 “Invalid URL” 错误提示,这可能是因为在编辑器的某些版本中,刷新快捷键被更改为了其他键。可以尝试使用其他刷新快捷键,例如 F5。
  3. 在拖动资源到面板上时,面板的层级可能会被隐藏到编辑器的后面,这可能是因为面板处于窗口的底层。可以尝试将面板拖到编辑器的顶部以便更容易访问。
  4. 如果需要将多个样式表添加到面板中,可以使用一个数组将它们组合起来。为了确保正确加载优先级,可以动态加载 index.css 并在需要的时候添加到页面中。
  5. 使用 Editor.Selection.curSelection 属性可以获取当前选中的资源,如果选中的是场景或 prefab,则可以使用 Editor.Scene.root 获取根节点。例如:

javascriptCopy code

var uuid = Editor.Selection.curSelection[0];
var node = cc.engine.getInstanceById(uuid);
var root = Editor.Scene.root.find(node.uuid);
console.log("root node name:", root.name);
  1. 节点树的右键菜单可以通过实现 Editor.ContextMenu 模块来添加。例如:

cssCopy code

Editor.ContextMenu.add({
    "node-menu-item": {
        label: "Custom Menu Item",
        message: "custom-menu-item-clicked"
    }
});

在场景编辑器中右键单击节点时,“Custom Menu Item” 将出现在右键菜单中。点击该菜单项将发送 “custom-menu-item-clicked” 消息。

  1. API 的使用可能需要花费一些时间来学习和理解,但是一旦熟悉了 API,就可以更有效地开发插件。可以参考 Cocos Creator 的文档和示例代码来帮助理解 API 的使用方式。
  2. 打开插件面板可能需要一些时间,这取决于计算机的性能和插件的复杂性。如果使用快捷键打开插件面板时没有反应,请耐心等待一段时间。

感谢提示,3.7上curSelection不存在了


用这个解决了
let type = Editor.Selection.getLastSelectedType();
let ids = Editor.Selection.getSelected(type);
这两个函数3.7也没有
var node = cc.engine.getInstanceById(uuid);
var root = Editor.Scene.root.find(node.uuid);

await editor.assetdb.openAsset(prefabUUID);

    let type = Editor.Selection.getLastSelectedType();
	let uuids = Editor.Selection.getSelected(type);
    console.log(type,uuids);
    //@ts-ignore
    var node = cce.Node.query(uuids[0]);;
    console.log("node",node);

按照这个测试,如果是新开一个prefab,默认是不选中状态,获取到的uuid是空,只有选中状态下才能获取到root

是的,您说得没错。在您新建一个 Prefab 并且没有选中根节点时,通过 Editor.Selection.getSelected(type) 获取的 uuids 数组是空的,因此 uuids[0] 返回 undefined。所以在这种情况下,您需要首先选中根节点,然后才能使用 Editor.Selection.getSelected(type) 获取到选中节点的 UUID 数组。

我的需求是自动创建一批prefab,然后打开添加模型,再保持,一个个选中做的话就是纯人工了

节点树右键菜单设置

"hierarchy": {
            "menu": {
                "methods": "./dist/menu/hierarchy-menu.js",
                "createMenu": "onCreateMenu"
            }
        },
1赞

请问是这个设置的吗? 我这边没有效果啊。

设置是对的,节点树右键创建那里,

唉~ 3.4.2不支持。。。 刚试了3.7是可以的。

上面的问题解决:
image

尝试在场景脚本直接加载

			let url_s = v_s.replace(path.join(Editor.Project.path, path.sep), "db://").replace(/\\/g, "/");
			let uuid_s = (await Editor.Message.request("asset-db", "query-uuid", url_s))!;
			let prefab = await new Promise<void | cc.Prefab>((resolve_f) => {
				cc.assetManager.loadAny(
					{
						uuid: uuid_s,
					},
					(err, res: cc.Prefab) => {
						resolve_f(res);
					}
				);
			});

上面这些问题,你需要这个

1赞

请问层级管理器(hierarchy)的扩展除了createMenu还有其他嘛,没有看到过相关文档

无吧,我都怼那个菜单下了

有的,论坛有人发过

可以直接放在自带的右键创建菜单里面吗