资源加载的疑问

我在浏览器上测试资源加载的接口
使用loadDir加载 resources下的资源

loadDir<T extends Asset>(dir: string, type: __private.__types_globals__Constructor<T> | null, onProgress: ((finished: number, total: number, item: RequestItem) => void) | null, onComplete: ((err: Error | null, data: T[]) => void) | null): void;

如下图:

文件夹中存在三个文件,两个bin,一个png

关于 onProgress: ((finished: number, total: number, item: RequestItem) => void) 中返回的参数

             * @param onProgress.finish
             * @en The number of request items that have been loaded.
             * @zh 已经完成加载的资源数量。
             * @param onProgress.total
             * @en The number of all request items to be loaded.
             * @zh 所有待加载的资源数量。

finish表示已经完成加载的资源数量
total表示所有待加载的资源数量

但是实际打印出来的值

加载资源 finished: 1 total: 5
加载资源 finished: 2 total: 6
加载资源 finished: 3 total: 7
加载资源 finished: 4 total: 7
加载资源 finished: 5 total: 8
加载资源 finished: 6 total: 8
加载资源 finished: 7 total: 8
加载资源 finished: 8 total: 8

为什么总数量会是8个?
total一开始是5 后来变成了8?

因为加载之后,还有其他的解析管线来解析资源,比如你的png,如果导入编辑器的时候选择的是spriteFrame类型,则可以解析为两个资源,一个texture,一个spriteFrame。你的bin文件看起来也应该是这样的,可能是多个资源打包而来的。你不妨把每个资源都打印出来看看,尤其是uuid打印出来,去编辑器里对应找一找

1赞

而且cocos属于边加载边解析的,如果你有某个资源还引用了别的资源,cocos就会顺便也把依赖的资源给加载了,最后总的资源数会随着加载的进行,慢慢增加上去

1赞

看了下其中一个bin文件
他算是两个资源,一个bin一个json, 其中json应该其对应的meta文件

然后png解析为两个资源,一个texture,一个spriteFrame,然后各自搭配一个meta 共4个
两个bin,对应两个meta 加起来4个

总的正好8个。。。