发现一个快速定位引用了丢失资源的节点的方法,分享给大家

  • Creator 版本:全版本,理论上2.3之前都可以用

  • 目标平台: Web

  • 详细报错信息,包含调用堆栈:
    Failed to load resource:the server responded with a status of 404
    Uncaught Load text file failed: res/import/xx/xxxx.json(wrong status)
    CCDebug.js:216 Uncaught Object
    Failed to preload ‘Game’, undefined

  • 重现方式:找个引用了资源的节点,从外部删除掉那个引用图片,就可重现。丢失资源节点时编辑器会报错一次,如果不管他保存后,编辑器就不会报错了。构建时还会报错,但是预览时不会报错。

  • 之前哪个版本是正常的 :应该都是会有,非BUG

  • 手机型号 :

  • 手机浏览器 :

  • 编辑器操作系统 :

  • 编辑器之前是否有其它报错 :

  • 出现概率:100%

  • 额外线索:

想必大家都遇到过Failed to load resource:the server responded with a status of 404报错,
很简单的原因,是因为项目中引用了丢失的资源节点,
目前观察到的情况是2.2.2编辑器会报第一次错误,但是如果你没有修复并保存后,再次打开就不会报错了
但是游戏无法进入场景,会提示Failed to load resource:the server responded with a status of 404
经过我的摸索,找到了快速定位引用了丢失资源的节点,可以快速修复出错的节点

下面上图:

首先一般是报这个错误

然后打开浏览器的调试器,选中Network标签页

找到红字加载失败的Json,往上找到最后一个成功加载的

双击打开

搜索看一下失败的json文件引用是否在里面

找到了,翻到json顶部,可以看到json的类型、名称,就能快速的定位出引用了丢失资源的节点了

==========================================================================

还有一种解决办法:直接构建项目,编辑器就会再次报出丢失资源的节点。我之前居然不知道…

5赞

嗯,最后一句话亮了……

2赞

问一下,按钮组件能不能加一个点击cd时间的控制?

我重新构建了也没有报

赞一个,感谢,在构建的时候找到了丢失的资源。
还有一种办法,在网页打开后,

直接在项目的资源丢失所在文件夹复制一份json文件,把名字改成丢失的json文件,刷新网页也可以进入,但是再次用cocos打开这个项目,还是会有报这个资源丢失,此方法不治本,只限你无法找到节点丢失的资源时使用。

3.0之前 构建会提示那个预制那个节点上的资源丢失了.现在升级到了3.0不会提示了.提示下面的了 感觉不太友好了.
[Build] 资源({asset(db://****)})引用的资源({asset(38c0613f-2ce7-4cf7-a358-a859b00e217a@aca72)})无法在项目内找到,请检查该资源是否导入失败或者被误删除。

2.*版本,直接打包一次,报错有详细提示。3.0版本就比较扯了,有大概的路径,但并不能提示到完整路径

感谢分享,得到解决

资源已经没了,你还想要它的信息(无中生有)?有个对应的资源uuid定位到引用它的位置就不错了

楼主已经说了,构建时会提示,还有一种是自己在library文件夹搜索资源的uuid,就能找到对应的引用信息

这看自己经验,方法已经说了,一般2-3年的老手5分钟内就能定位到具体丢失引用的节点

我也遇到这个问题,在项目里面删除了一些无用的资源,然后就报了丢失资源的错误;构建时确实提醒了,一个叫new node 的节点引用了资源;但是问题是,我的场景里面没有这个节点,代码里也没有创建这个节点,这怎么弄呢。

写一个装饰器:

export function debounce(limit: number = 0) {
    let latestExecTime: number | null = null
    return (target: any, key: string, descriptor: PropertyDescriptor) => {
        const func = descriptor.value as (...args) => any
        descriptor.value = function (...args: any[]) {
            if (typeof latestExecTime === "number" && Date.now() - latestExecTime < limit) {
                latestExecTime = Date.now()
                return
            }
            latestExecTime = Date.now()
            try {
                // eslint-disable-next-line @typescript-eslint/no-unsafe-return
                return func.apply(this, ...args)
            } catch (error) {
                cc.error(error)
            }
        }
    }
}

// 测试代码:
@debounce(1000)
buttonTouchHandler() {
    cc.log(111)
}

直接打开代码编辑器,全局搜索 粘贴丢失的jsonid,找不到对应文件删掉不就完了

大佬我也遇到了,问题解决了吗