资源如何管理?

1。小游戏单个分包有4M限制,如果某一功能的图标等资源就已经超过4M,那么打在一个 Asset Bundle里,显然超过了限制。
2。如果分成多个Asset Bundle,又要事先知道哪些图片在哪个Asset Bundle里,使用时还要先加载对应的ab包。
3。如果把这些资源全都放进assets/resources/目录下,通过resources.load方法是可以,又会越来越增加resources目录的大小,影响小游戏进游戏的速度。
4。如果把这些外部资源不放进assets目录下,全部放在远程,小游戏可以用assetManager.loadRemote去加载这些资源,但如果同时出小游戏包,还要出原生包,那么怎么平衡这种情况?毕竟原生包不用限制,全丢进去assets/resources目录下,或者全丢进去哪个assetBundle里都行,多大都无所谓。

难道同时做小游戏+原生,要搞两套?

是的要两套

image 刚好看到这偏文章,我的这个思路其实跟这个一样,这个外部的资源,通过assetManager.loadRemote进行外部加载,但是在原生包里,这个外部的文件夹内的所有资源,要通过native.fileUtils进行获取?

小游戏有分包的机制,原生没有,而且小游戏不能动态加载外部js代码好像也有办法绕过论坛找找,最终还是得对对应平台进行优化还是分开两套把

原生打包再拷贝回去?

是的,脚本写好,打包时把这个外部加载的文件夹放进生成的目录下,再生成manifest文件,这样热更新都带有这个文件夹内的所有资源索引

参考下这个 https://forum.cocos.org/t/topic/154144/11

1赞

这是是判断某个资源在哪个bundle里,如果资源是放在assets同级的目录,那怎么加载?
native.fileUtils.getDataFromFile可以获取到这个文件的二进制内容,但是二进制内容在原生里如何转成图片?我把二进制转成Blob,但是原生并没有createImageBitmap方法来转成图片
image

还没做到那里,估计类似loadRemote吧,可能是先放在asset里生成好.meta你再拉到外面?

不是,跟assets同层目录,跟主工程没关系,你可以把这个目录当成纯外部加载的目录,不参与cocoscreator的构建相关,在assets外的文件不会生成meta文件,也就是上面那编文章所说,把资源放在外面,那么整个项目可以有成千上万的资源都不会影响编辑器的流畅性

可以了,原生包直接使用assetManager.loadRemote加载包里的资源就行

这个loadRemote加载的是和asset同目录的资源吗?
这个包放哪里呢,加载目录怎么写呢?

是的,loadRemote加载的是和asset同目录的资源,比如这个externalAssets目录image
这个目录跟assets是同层目录,不属于cocoscreator的内部目录,你可以把它当成外部加载的目录,小游戏直接放远程服务器上,原生包就直接放在生成的build/android/assets/目录下就行,一样用loadRemote就行,还是挺方便的

你这么说的话,这个externalAssets只要不在assets下就行了呗 :rofl: :rofl: :rofl:

原生如果放在assets下,就没必要用remote了吧。反正小游戏和原生肯定得分开处理,目录地址也不同的。

小游戏和原生同样处理,都用assetManager.loadRemote就完事了

所以最后你的游戏是打算 小游戏包跟原生包都用loadRemote去做保持统一吗

嗯,我是这么打算的,不然同一个项目,出两套代码,也够受罪的

loadRemote可以加载spine吗,不是只能加载图片和音频么

这个我是这样解决的,因为cocos的bundle信息在文件夹上,我用工具刷一遍工程的bundle信息(文件夹.meta里面),生成bundle -> 对应文件夹路径 的表。然后运行时的资源,用对应路径前缀去匹配找到bundle。匹配的话如果要高效就建立一个文件夹路径的类似Trie的数据结构,比直接循环对比全部路径要快很多。

然后我自己封装的资源管理,里面就只需要传路径,不需要管ab包怎么打,实际上都是会对应到正确的包去加载。unity这种类型的库比较多可以参考。

请问楼主,这个原生的话这个路径怎么填呀,assetManager.loadRemote,填externalAssets/no1.png路径啊。