CocosCreator 的 AssetsBundle 来了!

报红如:找不到目录: assets\modules\hall
确实是windows电脑环境问题
getUrlByRelativepath(rPath) {
if (this._isUrl(rPath)) return rPath;
// 去除前后的 “/”
rPath.replace(//$/, “”);
rPath.replace(/^//, “”);
//////////
let isWindows = process.platform === ‘win32’;
if(isWindows){
rPath = rPath.replace(/\/g, ‘/’);
}
/////////
return “db://” + rPath;
}
这里加上这句就好了~~

1赞

nice 我会修复一下

ERROR:Asset update error: src/settings.jsc, Not Found 或 Asset update error: subpackages/hall/index.jsc, Not Found

发现如果构建发布的时候,如果没勾上“调试模式”,更新是会失败的(jsb.EventAssetsManager.UPDATE_FAILED = 9),不知大神你有没出现过,是怎么解决的呀~~

另外一个小问题,当子包使用了主包的资源,这个是允许的,插件也是能正常打包的,但是报了红有些扎眼,刚开始以为是很大问题,那个地方用这个Editer.log 就可以了吧~~

你说的两个情况我这边都没有出现过,是正常的。
构建时需要注意
1.不支持自动图集的分离
2.没有测试过 【内联所有 SpriteFrame】和 【合并图集中的 SpriteFrame 】
3.主包默认是公共包 并且主包的某些配置是无法在面板上修改的,可以自己打开配置文件查看一下主包的 isPrivate 属性值是否是 false
4.资源的安全性校验:任意一个子包是否引用了另一个私有包的资源以及当前子包是否有资源丢失的情况

按照你的描述,可能还是win的兼容问题

感谢大神回复哈~~

我这边验证是勾选“调式模式”,正常更新,不勾选"调试模式",更新失败。如果 Mac 上是正常的,都能正常更新,那么确实有可能是 win 兼容问题。这个问题后续我会继续再验证下。

这个插件棒极了,非常感谢~~~ 应该就只差自动图集的处理了,就完美了,我试过你上个版本 subpackage-tools 这个是支持自动图集的,拭目以待~~~

之所以没有把自动图集的功能抄过来,是因为感觉这个功能会随着编辑器版本的迭代越来越鸡肋。win平台的兼容问题我后续会找个空闲时间做统一修复

图集这个功能很实用呀,觉得鸡肋是被编辑器的哪些功能替代了呢?

因为打图集只是为了降低dc,而降低dc是游戏引擎到后期必要的优化功能,目前引擎已经做了些降低dc的处理,后面应该会更完善
所以图集是前期降低dc的一个手段,而后期,更多只是一个辅助功能
个人理解

你的 不勾选调试 问题,可能是你的热更逻辑问题吧
1.先校验服务器资源完整性 以及版本号正确
2.热更完成后,检验本地热更资源的完整性和版本号正确(具体做法可以用root的手机或者使用官方的【调试原生js】的方式)
3.确认main.js设置了搜索路径,热更完成后重启app

发现子包 index.js 就算不勾选调试模式依然是明文代码,后期是否考虑原生平台加密成 jsc

你拉一下最新的插件代码;追加自动向 main.js 注入 设置搜索路径 逻辑

你的理解是很深入的。不过自动图集这个功能可能还是会保留,这个主要是为 2D 考虑的。引擎不论怎么降低 dc,都很难完美覆盖到具体的应用场景,毕竟引擎的动态图集合并结果是不稳定的,受到用户行为、资源加载顺序等影响。
开发者有能力可以做出比引擎更优的图集合并配置。

当然,之后可能可以通过其它手段,如复合材质来解决 dc 问题,不过适用性也不一定能完全覆盖到所有渲染组件,得尝试看看了。

已更~

发现了一个小问题:
子包1 文件夹名:aab
子包2 文件夹名:aabb
"检验子包资源安全性"或构建发布,会报 “子包 aabb 引用以下私有资源”:
“db://assets/modules/games/aabb/res/userinfo_default_head_0.png”,
“db://assets/modules/games/aabb/res/userinfo_default_head_0.png/userinfo_default_head_0”,
“db://assets/modules/games/aabb/scene/aabb.fire”,
“db://assets/resources/games/aabb/btn_enter.png”,
“db://assets/resources/games/aabb/btn_enter.png/btn_enter”
把子包所有的资源报出来了。

依然是 windows 环境下,推测 Mac 上应该也会有此问题。
如果把子包2 文件名改为:aacb ,则检验成功。


AssetsBoundle.js:143
let url = AssetsDB.getUrlByRelativepath(rPath)+"/";
后面加一个“/”就正常了。

最初:
0===============> db://assets/resources/games/aabb/btn_enter.png/btn_enter
1===============> db://assets/resources/games/aab
2===============> extUrls[j].indexOf(url) ====> 0

哈哈哈,这个indexOf的Bug上一个插件也有,我没有修只是人为规避了一下,这个Bug我会修一下,感谢提供线索

好的,那我会追加上对自动图集的分离处理

牛逼啊,大佬,持续关注

构建发布
调试模式(勾选):热更正常
D/jswrapper: JS: Verification passed : subpackages/hall/index.js (2173a5162fe6c389dc852b4627d33f64)

非调试模式(不勾选):热更失败
D/jswrapper: JS: Asset update error: subpackages/hall/index.jsc, Not Found

这个貌似是热更那边的问题了~~@jare

你这个问题很奇怪啊,js引擎设定加载子包的代码是默认加载 index.js 文件名的,引擎本身有优先加载 同名jsc文件 的逻辑,找不到jsc应该会加 js 的,你确认index.js文件存在吗

你可以尝试一下不适用插件,新建一个项目随便设置一个分包 然后不勾选调试模式测试一下

我这边测试是完全没有问题的 ,是你自己的热更逻辑有问题。
我正在完善自动图集功能