万能的引擎组,可否给Bundle增加一个属性控制(是否可枚举),用来自动清除垃圾。

对于众多小游戏来说,ASSET BUNDLE是绕不开的被重度使用的功能,但是俺觉得它有一个巨大的缺点。

名字为main的内建bundle有一个特性,就是不能用字符串来搜索里面的资源,这样有一个巨大的好处:不用人脑手工来过滤实际没有被scene直接间接引起的垃圾资源,这在开发的时候带来巨大额便利,管它是啥资源资料,扔到里面就行了,只要scene不引用就不会打包。例如我们经常把效果图弄到BUNDLE里面可以就近参考。

但是resources和自己创建的asset bundle一股脑把内容都打包了,这样做大厅游戏就费神了。不断挑挑拣拣那些是垃圾资源。

所以,如果Asset Bundle增加一个属性,控制是否需要全部打包(也就是支持使用字符串访问资源),能带来很大的便利,对于多数Asset Bundle来说,把它们当做 main 就完事了,资源都是通过场景直接间接引用的,极个别的需要字符串访问的才需要对这个控制属性打勾。(特别声明resources设计上还是不允许用户修改,默认都打包,不允许用户修改,其他的用户包如果能支持这个特性,默认都勾上,但是允许用户修改控制这个属性)

另外,目录里面不支持子目录设为bundle也有点不方便,这个也希望改进。

引擎组不骂是不动的,反正我们不是给你们发工资的人,这是个困局。

所以号召一下各位普通用户,如果觉得有道理,帮忙支持和帮忙催催。

下回准备攻击一下其他友商编辑器不开源的伪开源。

不骂是不动的吗?也是,骂的话,我可就不困了,而且一大帮人会过来互相 battle。
但如果好好说话,大家沟通效率会高很多~~
如果担心好好说话没人搭理,可以在论坛 @jare

1赞

jare大大,我等还是得有自知之明,哪敢放肆。查水表虽然不能,但是封个禁言啥的轻松简单。若哪天你们同事压力煲爆炸,我们也丧失了国内国产引擎最最重要的一面旗帜和一个交流的场所。

大佬, 想请问一下, 这个是bug, 还是就是这么设计的?有这类需求怎么解决?

感谢你的反馈,我们有在思考这个问题,我们确实认可你说的这个调整,不过我们需要一些详细的需求描述,你能稍微详细说明一下你面对的需求是什么么?为什么不想通过名字加载的资源会需要放在 bundle 文件夹下呢,我们分析下核心问题

1赞

就是我们开发的时候,常常把这个界面参考图,参考文档啥的和正式的资源就近放在同一个Asset Bundle文件夹里面,和正式使用的asset混在一起,这个是我们的惰性。再如声音资源,粒子资源,有多个效果,只用了最好的那个资源,其他的一般不删(怕领导要求用另外的备份资源)。

我们揪着小游戏来说(APK可以都放在main里面没有我们的疑问)
例如开发一个游戏合集,main里面放的是大厅,射箭游戏放在的Assets/G1文件夹,钓鱼放的是Assets/G2文件夹,这个G1, G2都设置成了Asset Bundle,是为了应付小游戏的4M分包。

那么开发射箭G1的时候,大量的界面参考图,设计文档等等如果不能放在G1里面,就会对资料管理有点费脑,要维护多个地方。如果能就近放在G1里面,但是又能保证它们不会被打包,这就省脑了。

为了向老版本兼容,Asset Bundle(正如resources工作的那样),默认都是可枚举的,全部打包的。如果我们程序人脑确认这里面的东西都是为了应付4M分包,不是为了字符串访问资源,那么,加上属性控制,使得这个Asset Bundle工作起来和main一样(自动过滤掉没被引用的资源),就非常完美了。

子文件夹嵌套Bundle也是同样出发点(为了偷懒省脑),就是总内容超过4M了,就需要一个小游戏多个Bundle了。

这上面的考虑都是基于强大的Bundle设计思路,你们2.4引入的Bundle非常牛,甩友商10条街。Bundle里面的不同优先级的Bundle资源会自动把资源往高优先级的的Asset Bundle转移,这个设计全球第一。

所以请万能的 @EndEvil @jare 多多支援。

1赞

再说一个需求,就是棋牌小游戏,斗地主,围棋,象棋,跳棋,都是相互独立,只依赖大厅的小游戏,都是Asset Bundle。

A客户来了,说要定制包含 斗地主 象棋的 A地方游戏产品,
B客户来了,说要定制包含 围棋,象棋,跳棋的 B地方游戏产品

如果斗地主,围棋,象棋,跳棋都是分别独立的Asset Bundle文件夹,那么组装起来就非常迅速。

1赞

你是想让bundle内可以向main那样的静态目录一起能剔除无用资源,

但是可能bundle内同时又需要动态加载资源,这个需求要是做的话,是不是得弄bundle的嵌套呢?

想想都麻烦 @EndEvil @jare

大帅,就是给bundle加个开关,使得bundle可以选择象main那样工作,或者象resources那样工作。

每个 bundle 里面都可以有一个 resources, 需要动态加载的放 resources

1赞

那资源路径不就又深了一层嘛,说白了还是项目管理的问题,开发的时候懒得整理,一股脑扔在ab里,打包的时候又嫌弃把不需要的资源打进了包体。。太难了

路径深了一层不是什么大问题(而且我们项目也都在积极的清理无用的资源,但是说实话这是一种重复的, 无意义的工作, 虽然可以自己写插件来处理),引擎肯定是这些细节处理的越好,用户越省心;项目管理固然重要, 但是很多团队受限于人员水平,工期等,这方面可能没有处理好,那肯定还是给用户一个简单的规则,剩下的交给引擎来处理用着更舒心。

其实就是转移工作量:“我懒得搞,你帮我搞一下”

官方搞一次, 省下万千开发者的精力, 时间,难道不值得?官方的目标肯定也是弄出易用, 强大,开发者喜欢的引擎。不是说只要能用就可以了,“懒” 是人类进步的阶梯,而且大家选择 cocos, 不都是看中 cocos 其中的一些优点,能减少自己的工作量, 谁选择一个工具会为了麻烦呢?

没毛病,这话。

谢谢反馈,之后我们会赋予 Bundle 更高的灵活性,满足大家的定制需求。

现在比Unity强的的地方一个是支持小游戏,一个是Bundle比他们的好用。Unity的要自己写插件来勾选不同的包范围,反人类。

说白了,就是 bundle 中标记某些资源不打包,类似效果图这类的

我上上个月提过一个类似的需求,没人鸟我。。
我提的是把texture里的资源做一下是否打包的标记。

我目前就是这样的目录结构,hhh