游戏
如何从0到1制作一个 Cocos Creator 插件?超详
2023-02-07 15:35   游戏
如何从0到1制作一个 Cocos Creator 插件?超详细开发指南来了!游戏游戏开发制作(如何从0到1制作一款 Cocos Creator 插件?超详细开发指南来了!)

各种插件在开发过程中总是必不可少的。Cocos Store 它提供了很多插件资源,但有时我们需要自己制作一些插件。这一次,开发者 muzzik(马赛克)将分享 v3.x 插件开发过程和经验,一起做插件吧!

游戏游戏开发制作(如何从0到1制作一款 Cocos Creator 插件?超详细开发指南来了!)





Cocos Store 资源商店



首先,为什么要开发插件?


任何重复的机械劳动都是毫无意义的,所有的机械劳动都可以自动化,插件可以帮助我们实现自动化。


插件能给我们带来什么?


首先是时间。解决自动化问题最大的好处当然是节省了额外的手动操作时间。俗话说,很难买到每一寸时间。节省时间是插件的最大价值。


第二是收入。我们可以向开发的插件发布 Cocos 在给他人带来便利的过程中,商店也能给自己带来额外的好处。


第三是生态。各种插件涵盖了开发的各个方面,这将有助于更多的开发人员。我们可以给每个插件 Cocos 生态加砖加瓦。


第四是技术。插件开发所需的技术包括但不限于 HTML、CSS、NodeJs、Vue,在开发插件的同时,还可以帮助我们扩大技术范围,提高个人竞争力。


这一次,借用这篇文章,我将从入门、高级、深入三个部分与大家分享开发 Cocos Creator 3.x 在实际开发中积累的插件流程和经验,期待更多的开发者加入开发插件的行列!





PS. 由于篇幅有限,微信官方账号只显示文本部分,在论坛专贴中,我附上了关键内容的参考和扩展链接,如果你想成为一个深入了解的朋友,你可以直接去论坛阅读:






入门







1、创建插件


我们可以打开顶部菜单栏 扩展/创建扩展 打开插件创建面板。




插件放在哪里?打开顶部菜单栏 扩展/扩展管理器 找到我们的插件,点击 Open Folder 打开我们的插件根目录文件夹。




因为我们的插件一开始可能会依赖部分 npm 因此,模块需要初始化:

cd 插件根目录

npm i





2、package.json 简述


package.json 它是插件根目录中的一份文件,它包含了大量的信息,相当于插件的身份证,其中三个最重要的配置是:

main:关系到插件能否正常启动。

panels:与面板能否正常显示有关。

contributions:插件的大部分配置都在这里。





3、插件多语言


在开发过程中,我们经常使用多语言。如何实现插件多语言?事实上,这取决于一个放在插件根目录中 i18n 文件夹为了实现,存储在文件中的文件名称是语言代码,内容是导出对象。





插件多语言的基本使用方法是:

使用脚本:let str = Editor.I18n.t(‘first-panel.open_panel’);常用于动态显示内容。

使用HTML:<ui-label value=“i18n:first-panel.open_panel”>;常用于面板。

JSON 使用中使用:“description”: “i18n:first-panel.description”;在 package.json 中使用。





4、通过消息启动插件面板


首先,我们需要注册一个菜单项才能启动插件面板 package.jsoncontributions.menu 在里面,写一个包含 pathlabelmessage 属性数据。





这些内容代表了什么?

菜单路径:path + label = 扩展/demo_part1/默认面板

点击菜单触发的消息:message







监听消息


我们可以在 package.json 文件中的 contributions.messages 写入我们监控的信息名和触发的方法数组。




我们所有的事件都在 messages 里面注册,这里的 open-panel这是我们注册的事件,open_panel 触发方法名,因为没有指定面板名,所以触发方法名 main 接下来,让我们来看看内部方法。 open_panel 该方法做了什么?







看看回调做了什么


open_panel 我们调用了内部 Editor.Panel.open,这就是打开面板的方法。Editor.Panel.open 参数为“扩展名” | 扩展名.面板名”。





到这里点击菜单后,打开我们的插件面板。




5、编写插件面板的内容


首先是面板的一些基本属性,我们在 package.json 内的 contributions.panels 中定义:

title:面板标题。

typedockable(可停靠) | simple(不能停靠)。

main:面板入口脚本文件夹,文件名称默认 index.js。

size:面板大小信息。



如何显示面板的内容控制?index.js 我们在文件中导出的对象,template 则为 html 内容,style 则为 css 内容。这篇文章涉及的内容比较深,可以去论坛专题文章查阅相关参考链接,深入了解。






6、消息系统


我们前面说过如何监控一条信息。让我们看看如何发送信息。




发送消息有三个接口,包括发送、请求和广播。详见官方文件。







查看默认定义的消息


打开菜单 开发者/消息列表 即可查看。









调试消息


新闻管理器中的新闻并不是编辑器中的所有新闻,那么我们如何知道我们的操作触发了什么新闻呢?使用新闻调试工具和菜单 开发者/新闻调试工具:

点击播放按钮(扫帚图标旁边的按钮)开始操作。

点击操作后的暂停按钮。



这样,我们就可以看到这个操作触发的所有新闻,包括新闻的参数。




7、场景脚本


简单地说,场景脚本是与编辑器中脚本运行的环境相同的脚本。当我们需要调用引擎接口时,我们需要使用它,如加载资源、获取节点等。







场景脚本在 package.json 中的定义









场景脚本结构


load:加载回调。

unload:卸载回调。

methods:场景脚本事件函数存储位置。








与场景脚本通信


我们可以通过消息系统默认定义的消息进行通信:

name:扩展名。

method:触发事件函数名。

args:事件参数。





8、配置系统


简单地说,配置系统是编辑环境下的文件读写工具。




我们可以在脚本中使用,没有任何前提条件,但需要注意的是,我们在写文件之前获得的第一个值必须是 undefined。可以通过 package.json 配置默认值。






9、插件编译



使用 ts 写插件自然需要编译成 js 才能使用。如何编译 ts 脚本呢?市场上有很多第三方编译器。在这里,我们选择通过 tsc(Typescript 语言自带编译器)进行编译。


我们可以在命令行输入以下命令编译脚本:

tsc -b [tsconfig 所在目录]:单次编译。

tsc -w [tsconfig 所在目录]:监听编译(在 ts 文件保存并更改后,将自动编译)。



脚本命令也可以配置,在 vscode 内可以通过 ctrl + shift + p 搜索和执行。




10、发布插件


插件开发完成后,我们可以发布到 Cocos 商店。发布前,建议您仔细阅读商店的插件资源发布规范:




确认后登录 Cocos 开发者中心




点击商店 -> 卖家中心 -> 发布新资源。填写后,等待两三天的审核时间。如有任何问题,官方人员将与您联系。




进阶







1、了解主过程和渲染过程


当你接触插件开发时,你可能听说过主要的过程和渲染过程,但你不太了解它们,那么它们是什么呢?

主进程:package.jsonmain 脚本运行过程的属性(插件入口脚本)

渲染进程:package.jsoncontributions.panelsmain 脚本运行过程的属性(插件面板入口脚本)







如何交互不同的过程


通过消息系统:最简单的方法。

通过 websocket:一般没有人这样做。







使用过程中的误解


数据不是共享的,而是单独的。这里经常犯的错误是认为他们使用相同的数据,实际上是两个单独的数据,不同过程之间的数据不会相互干扰。

不要把昂贵的计算逻辑放在主过程中。会造成放置在主过程中 Creator 最好将编辑器界面卡住,放在插件渲染过程中或单独打开个子过程中。




2、使用 element-plus


element-plus 是一个 web 前端常用的 UI 组件库,Cocos Creator 虽然编辑器也提供了一些插件 UI 组件,但可能不满足我们的需求,此时可以使用 element-plus






3、html 和 css 调试技巧


开发插件时需要经常修改 htmlcss,不想每次都重新加载插件怎么办?


点击插件面板,然后按下插件面板 ctrl + shift + i 打开开发人员工具,可以直接编辑 htmlcss 效果是实时生效的,我们可以修改到预期的效果,然后将其移动到插件源代码。






4、扩展 inspector



inspector 简单来说就是属性检查器面板组件显示的内容。怎么定义 inspector?只需要在 package.json 中的 contributions 中声明即可。









与组件数据交互


inspector 自定义了我们的组件属性面板显示,那么如何与组件数据交互呢?有两种方法:

场景脚本。可以通过场景脚本 getScene 拿到场景根节点,找到我们的组件进行数据访问和修改。

消息系统。建议使用编辑器。我们不知道新闻内容可以通过新闻调试器获得。编辑器将依赖这些信息,如取消操作。





5、插件公共代码库


在插件开发过程中,我们可能会遇到几个插件使用相同的代码。此时,如果我们想只保留一个公共代码,我们可以在插件根目录中 tsconfig.include 添加我们的公共代码库路径。





但有一个问题是,插件编译后的路径结构与以前不一致。如何解决这个问题?我在这里写了一个小工具:插件编译器,可自动修改 package.json 自动复制依赖于引用公共代码库引起的路径不一致性 npm 包到输出目录,输出 zip





下载和使用插件编译器:






深入







1、使用 Creator 制作插件 UI




看起来很复杂,实现起来并不难。插件面板也是一个 web 界面,而 web 界面可以同时嵌入, Cocos Creator 也可以输出 web 包,所以事情很简单。




通过 iframe 嵌入指定网站链接的标签可以实现插件面板显示 Creator 界面:

调试时:嵌入预览网站。

发布时:本地开个 http-server,指向编译后的 web 包装路径即可。





2、调试主流程代码


在开发过程中,可能会出现主流程报错但无法调试的情况。那么我们应该如何调试主流程呢?


首先设置 Cocos Dashboard 启动选项,path 后者是项目根目录:


然后打开 chrome://inspect/#devices 配置:


点击 Discover network targets 右侧的 configure 添加 localhost:5858

最后,打开相应的项目,target 下面会有一个新项目,点击蓝色 inspect,这时,我们进入了主进程开发人员工具,可以使用 ctrl + p 搜索自己的插件 main.js 进行调试:





3、代码加密的方法


服务器中的逻辑。主要代码放在服务器上,插件面板只负责显示,即使代码被偷也没关系。

使用其它语言。使用 C、C++ 编译为 wasm,核心代码的破解基本结束。

混淆。这种方法,只防君子不防恶棍。



以上是本次分享的全部内容,希望对大家有所帮助!最后推荐几款我发布在上面 Cocos Store 感兴趣的小伙伴可以下载取用上面的插件和源码。





SDF 纹理生成工具:




根据节点名生成节点引用代码插件:




扩展编辑器菜单(使用插件):




点击文末【阅读原文】去论坛专贴,查看有关情况 Cocos Creator 如果您有任何问题,请在帖子中与我沟通!


游戏游戏开发制作(如何从0到1制作一款 Cocos Creator 插件?超详细开发指南来了!)

声明:易商讯尊重创作版权。本文信息搜集、整理自互联网,若有来源标记错误或侵犯您的合法权益,请联系我们。我们将及时纠正并删除相关讯息,非常感谢!

您可能感兴趣的...
紫龙新品拿下港澳台iOS畅销榜TOP1,悠星1月收入创新高
2月87个版号来了:王者和梦幻获批,腾讯网易灵犀心动天梯在列
《和平精英》与仙剑的海岛情缘
  • 《和平精英》与仙剑的海岛情缘
  • 2023-02-13分享热度:440...
  • 如果要盘点中国游戏历史,《仙剑奇侠传》(以下简称仙剑)永远是其中绕不过去的一座丰碑。自1995年诞生...
2022年版号重启至今,腾讯、网易等厂商都有哪些游戏获批?
二次元!你的皇帝驾崩了!
  • 二次元!你的皇帝驾崩了!
  • 2023-02-13分享热度:483...
  • 曾经也是风头无两的IP啊!二次元手游,自古以来是各家必争之地,在这个古战场上,玩家们见证了群雄割据...
动视暴雪净利润降44%,微软拥抱ChatGPT市值飙涨
五年空窗,留给Supercell的时间还有多少?
Supercell新作《Squad Busters》能活到引进中国的那一天吗?
原神声优又出事了,提纳里英配骚扰未成年,聊天记录露骨不堪
手机游戏开发的(从“青涩”到“成熟”,浅谈手游发展史)
热门资讯...