3.3版本的插件扩展使用。

你们有尝试在3.3里使用2.X的插件吗?我一开始是直接复制过来,package文件,后来发现,3.3不叫这个名字了,改成extensions了,然后我就又修改了扩展文件夹名字,然后在加载的时候没报错,有一个警告,package_version未定义。然后插件也没有加载出来,在预想的菜单里也没有出现相应的按钮。是不是扩展的开发流程也有较大的变化了?原来给2.X用的插件,是不是不能直接在3.3中使用了? :sob:

1赞

不能够直接使用。

2.x 到 3.x 最主要的变化如下:

1. package.json 文件所需要的属性变化了

主要是:菜单栏、快捷键和面板的定义方式发生了变化。

同时还要求一个 package_version 字段,用来区分版本。

具体可以看下文档。


2. 入口文件的接口导出方式变化了

入口文件也就是 package.json 里的 main 字段指定的 js 脚本,编辑器在加载插件时只会跑这个文件。

在 2.x 中,我们导出的方式是:

module.exports = {
  load() {
    // ...
  },
  unload() {
    // ...
  },
  messages: {
    // ...
  },
};

而在 3.x 我们不能直接给 module.exports 赋值,因为这样会覆盖掉编辑器提前注入的环境。

正确的导出方式为:

exports.load = function (){
  // ...
};
exports.unload = function (){
  // ...
};
exports.methods = {
  // ...
};

3.x 的 methods 对应 2.x 的 messages,但是 3.x 不再限制函数命名。

methods 以及 messages 属性都是用于导出函数给到编辑器来调用,与 package.json 中指定的函数名相对应。

注:当然 2.x 也可以用 exports.xxx = xxx 的方式来导出。

关于 module.exports = {}exports.xxx = xxx 这两种导出方式的区别,可以自行查询 node.js 的 common.js 规范。


3. 编辑器的 API 不一样了

多数 API 都发生了变化。

假如你需要开发 2.x 和 3.x 都支持的插件,我建议你在扩展里使用一个单独 js 来封装兼容不同版本的 API,这样扩展更新起来也方便一些。


4. 不再内置 Vue 了

在 2.x 中,扩展窗口继承了编辑器自带的 Vue,但是这个 Vue 版本比较低。

所以我自己都会在扩展里面带一个最新的 Vue。

但是,如果你的扩展需要吸附到编辑器界面中,这里会有一些坑。

就是你不能够直接用新版的 Vue 覆盖掉编辑器自带的,这样会导致编辑器异常,此时需要一些骚操作。

具体可以参考:src/renderer/view/entry.js · 陈皮皮/Cocos 扩展 - 骨骼查看器 - Gitee.com

在 3.x,扩展窗口不自带 Vue 了,这就很棒。


5. Electron 版本差异

众所周知 Creator 是基于 Electron 开发的。

所以扩展开发也会受到 Electron 版本的影响。

在 3.3 中最主要的影响就是:如果想要在窗口中集成 node 环境,那么打开窗口时还需要禁用 contextIsolation 属性。

const win = new BrowserWindow({
  // ...
  webPreferences: {
    nodeIntegration: true,
    contextIsolation: false,  // 注意这个
  },
});

Electron 版本差异也会影响到其他的功能,这里就不细说了。


:cry: 怎么感觉我得写一篇文章才行…

暂时就说这么多了,鱼的鳞片都快被我摸秃噜了…

遇到啥问题也可以私聊我(微信 im_chenpipi

我尽量解答吧,当然我也是个菜:chicken:,不一定会…

想要加「交流群」也可以加我,DDDD


最后!

我最爱的 Quick Finder 目前是支持 2.x 和 3.x 了,目前也是同步更新维护。

如果你要自己开发扩展,可以参考下:

如果需要附着到编辑器界面内,骨骼查看器也很有参考价值(但是还没时间兼容 3.x):

顺便打个广告:

当然,我的扩展都是开源的:

5赞

皮佬:cow: :beer:

感谢大佬的解答,赶紧去学习学习~~~ :heart_eyes:

皮佬:cow: :beer:

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。