点击上方亿元程序员+关注和★星标

引言
哈喽大家好,欢迎小伙伴提供的素材:
亿哥 晚上好,上次压缩了
PNG图片后,图片资源还是非常大。仔细研究了一下,发现项目里面居然还有很多没用到的祖传资源!
游戏快要上线了,项目里却还有很多旧的资源,怎么办?
通常这样的情况出现于项目的二次开发阶段或者界面效果不好频繁更换的情况。
由于界面的布局发生变化,图片没办法直接覆盖替换,一不小心就有可能会导致旧资源遗忘在项目里,造成"泄漏"。
那我们把遗忘的资源删掉不就好了?
是的,前提是要知道哪些资源是已经没被引用了!
言归正传 ,本期一起来看看,如何在Cocos游戏开发中,自定义插件查看资源被什么资源引用。
本文源工程可在文末获取,小伙伴们自行前往。
直接上实例
客官请留步,倒杯茶,咱们本期直接上实例,废话最后再说。
1.创建插件
想要自定义插件查看资源被什么引用 ,首先要创建我们的插件,通过菜单扩展->创建扩展打开扩展创建面板,选择一个空白模板进行创建并启用插件。

添加 个消息findReferences和快捷键ctrl+shift+f。

2.插件原理
每个 导入项目的资源(图片、音频、
prefab、脚本等)都会自动分配一个uuid。这个
uuid用于在项目中唯一标识该资源。通常
uuid会在资源文件或者资源的meta文件中。

如上图 ,Main.scene的uuid,或者是在下图的Main.scene.meta文件中:

原理很简单 ,就是获取当前资源的uuid,然后再去查找其他所有资源,如果其他资源文件的数据中包含了当前资源的uuid,说明当前资源被引用。
3.插件流程
开始->获取选中的资源的uuid->遍历asset目录所有的资源->判断uuid是否在遍历资源的数据中->结束
-
获取选中的资源的uuid :
const selectedUuids = Editor.Selection.getSelected("asset");
-
遍历asset目录所有的资源 :
const allAssets = await Editor.Message.request('asset-db', 'query-assets', { pattern: 'db://assets/**/*' });
-
判断uuid是否在遍历资源的数据中 :
let assetFile = fs.readFileSync(assetInfo.file, 'utf-8');通过fs模块读取文件内容然后判断是否包含选中资源的uuid。
4.效果演示
在插件目录 ,安装依赖npm install和构建插件npm run build。

选中 图片资源,按下crtl+shift+f:

选中 脚本资源,按下crtl+shift+f:

整体预览如下:

温馨提示
-
以上插件功能仅显示选中资源的被引用情况,要查询所有资源的小伙伴可自行修改扩展遍历所有图片资源。
-
插件仅查找资源被其他资源引用情况,代码中动态加载的资源,需要自行扩展(检索接口或配置)。
-
除了 在
Bundle包中(包括resources文件夹),没被依赖的资源不会被打到包中。 -
工具检索是需要的,但是也需要人工对资源进行辨别,特别在上线前,保证不误删在用资源。
结语
以上就是如何查看资源被什么资源引用的全部内容,如有不对,还请小伙伴们指出,欢迎更多的小伙伴进行投稿(素材、文章,硬币等等),感谢支持!
小伙伴们在游戏开发中还遇到哪些有趣的事情呢?
本文源工程 可通过私信 发送 resfinder 获取,更多不实用资源 可通过阅读原文获取。
我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助, 也希望通过您能帮助到大家。
AD:笔者线上的小游戏《打螺丝闯关》《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》《方块掌机经典》大家可以自行点击搜索体验。
实不相瞒,想要个赞 和爱心 !请把该文章分享给你觉得有需要的其他小伙伴。谢谢!
推荐专栏:
点击下方灰色按钮+关注。