游戏运行时发现资源不存在,各位是怎么定位出问题资源的?

在游戏启动或loading阶段,常常要加载大量资源,如果其中某个资源丢失了或不存在,Creator引擎就会报以下错误,但因为文件名变成MD5了,所以光看报错信息很难判断是哪个资源不存在,只能依靠对项目模块的熟悉程度和直觉去找问题,有时能马上定位,有时要花很长时间,导致效率不高。如下面这种报错:



怎么能快速定位究竟是哪些资源找不到呢?

PS:没有好方法的话,我研究下看是否能写个脚本,在运行或构建前来提前检测不存在资源~

编辑器里点搜索,按UUID查找。

删资源之前最好右键,查找引用后,确定没有引用再删

参考这个方案:
https://forum.cocos.com/t/error-enoent-no-such-file-or-directory-2-0-10/82154/20?u=337031709

@337031709 感谢大佬回复,我昨天也看到 uuid-to-mtime.json 文件了,不过还是不能定位问题。举个例子:

a.prefab 引用了 a1、a2、a3 三张图片,我把 a2.png和a2.meta 删掉,则加载时会报 xxxx 资源不存在,但这时在 uuid-to-mtime.json 是找不到 xxxx 信息的,因为它在构建前就没有了。所以我不知道 xxxx 对应的是 a2.png 资源,也不知道真正引用它的是 a.prefab 。

其实我的问题就是,发现 xxxx 资源不存在后,如何找出是谁引用了 xxxx 资源?或者找出 xxxx 资源的原名称也行。

用nodepad++全局搜索这个uuid

1赞

vscode全局搜索uuid 就能定位到某个场景或者预制体文件 , 编辑器打开定位的文件控制台会有警告

1赞

@813601376 @flyingfish2016 说的不错,的确用 VSCode 全工程搜索能找到目标文件,感谢~

楼上说的对的,就把整个工程托进去 全局搜一般都能搜出来, 搜不出来就去点点预制体一般都会爆出来错了

有时候会某个预制引用丢失,上线才知道,可以用cc.loader.loadResDir("", cc.Prefab)全部加载一遍,有报错就是丢失了引用

对一个有几千个资源,几十个Prefab目录的工程来说,这个方法也可以吧,虽然累一点:joy:

不过也有缺点,就是只对resources下目录有效,静态资源就测不到了。而且不一定只有Prefab,有时候.anim文件也很多这种情况。