预加载 Prefab 资源时无法一并预加载其依赖的图片资源

  • Creator 版本: 3.6.3
  • 目标平台:微信小游戏

问题描述:
在微信小游戏平台中,通过 preload 接口预加载 Prefab 资源时,只会预加载 Prefab 自身,而 Prefab 依赖的其他资源(比如 SpriteFrame)则不会进行加载。

通过引擎代码可知,导致这个问题的原因是在下载完成后,通过 _parseDepsFromJson 接口无法获取到依赖的图片资源;只有通过 load 接口真正加载 Prefab 的时候,才能通过 _parseDepsFromAsset 正常获取依赖的图片资源并进行加载操作。

想确认下这个问题是 Bug 还是引擎本来设计就是这样?

你都看了代码了,就是这样设计的呗,依赖的资源解析的时候才会加载,preload只下载,不解析

如果是这样的话,preload 不就很鸡肋了?依赖的图片资源一个都没下载。。。

要下资源的话,preload资源文件夹吧,不然就自定义加载管线,反正引擎这个就是这样的

preload 的时候,不进行解析操作,但图片 texture2d 的 json 中有 mipmaps 字段,这个 mipmaps 应该就是对应图片资源的 uuid,将 mipmaps 中的 uuids 当作依赖资源,然后预下载不可以吗? 这样的话,也不需要进行解析成 Asset 操作

准确的说,这是一个 bug. 主要问题是现在 3.x 的资源格式的复杂度比 2.x 更高,没法在资源被反序列化之前就拿到依赖信息。之前做了一个临时的解决方案,https://github.com/cocos/cocos-engine/pull/14829/files
在预加载的时候也去反序列化资源,这样就能正常预加载资源,但会增加预加载的开销,需要谨慎合并。后续这个问题的解决方案,是在离线期就将资源的依赖关系扫描出来,运行时预加载就不用在依赖反序列化了。

思路清晰。

原来是bug。。。。。。

感谢回复!

想问下这个问题目前有排期吗?大概会在后续的哪个版本中解决?

另外,可以使用 json 中的 mipmaps 字段作为依赖关系进行预加载吗?

计划在 3.8.x 的某个版本中实现,目前已经在实现编辑器的部分内容了,之后的实现方式是在离线期就收集好所有的资源依赖,除了能解决预加载的问题外,还能把之前长期存在的加载时进度条倒退的问题一并解决了。另外你说的这个用 json 的 mipmap 字段去解析的问题,当然,针对 texture 这个资源来说,这种针对性的去解析 json 中的数据是可以的,但是引擎的资源类型太多,每个资源的数据格式都可能不一样,不可能针对每个资源类型都写一套针对性的解析代码,这样不利于后续维护。当然,你可以先自定义引擎先这么解析也是 OK 的。

期待,希望预加载队列能够支持暂停,取消和插队

大佬,382也快出来了,准备哪个版本呢?

2.X的preload 应该是能下载相关资源的 3.X的到不行了?

所以什么时候解决呢

creator3.7, web平台用preload的时候, 返回可是连所有依赖的png一并返回的. 可是微信小程序平台就变成了只下载prefab, 逗

请问这个问题解决了吗?

请问这个问题解决了吗

反正3.8.3没解决

385都还没解决呢 :upside_down_face:

3.8.6还没修复,这个不错先用着