在游戏启动或loading阶段,常常要加载大量资源,如果其中某个资源丢失了或不存在,Creator引擎就会报以下错误,但因为文件名变成MD5了,所以光看报错信息很难判断是哪个资源不存在,只能依靠对项目模块的熟悉程度和直觉去找问题,有时能马上定位,有时要花很长时间,导致效率不高。如下面这种报错:
怎么能快速定位究竟是哪些资源找不到呢?
PS:没有好方法的话,我研究下看是否能写个脚本,在运行或构建前来提前检测不存在资源~
在游戏启动或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
vscode全局搜索uuid 就能定位到某个场景或者预制体文件 , 编辑器打开定位的文件控制台会有警告
楼上说的对的,就把整个工程托进去 全局搜一般都能搜出来, 搜不出来就去点点预制体一般都会爆出来错了
有时候会某个预制引用丢失,上线才知道,可以用cc.loader.loadResDir("", cc.Prefab)全部加载一遍,有报错就是丢失了引用
对一个有几千个资源,几十个Prefab目录的工程来说,这个方法也可以吧,虽然累一点
不过也有缺点,就是只对resources下目录有效,静态资源就测不到了。而且不一定只有Prefab,有时候.anim文件也很多这种情况。