You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity Addressables WebGL首次启动后无法获取正确更新资源下载大小

解决WebGL下Unity Addressables更新大小始终显示0的问题

问题根源

WebGL平台上,Addressables会把Catalog和已下载资源缓存到IndexedDB里。首次启动后,要是没主动校验远程Catalog的更新,Addressables会直接用本地缓存的旧Catalog,导致后续调用GetDownloadSizeAsync时,误以为资源已是最新状态,返回0。只有清空IndexedDB清除本地缓存后,才会重新拉取远程Catalog,得到正确的更新大小。

解决方案

核心是先强制更新Catalog,再检测下载大小,确保基于最新的远程资源清单判断。

修改后的代码示例

private IEnumerator PreLoadData()
{
    // 第一步:更新Catalog,确保拿到最新的远程资源清单
    AsyncOperationHandle<List<string>> catalogUpdateHandle = Addressables.UpdateCatalogAsync(true);
    yield return catalogUpdateHandle;

    if (catalogUpdateHandle.Status == AsyncOperationStatus.Succeeded)
    {
        // 第二步:基于最新Catalog获取下载大小
        AsyncOperationHandle<long> downloadSizeHandler = Addressables.GetDownloadSizeAsync(PreloadLabel);
        yield return downloadSizeHandler;

        OnSizeRecived.Invoke(downloadSizeHandler.Result);

        if (downloadSizeHandler.Result > 0)
        {
            AsyncOperationHandle downloadDependencies = Addressables.DownloadDependenciesAsync(PreloadLabel);

            while (!downloadDependencies.IsDone)
            {
                OnPercentChange.Invoke(downloadDependencies.PercentComplete);
                yield return null;
            }

            // 释放Catalog更新句柄,避免内存泄漏
            Addressables.Release(catalogUpdateHandle);
        }
    }
    else
    {
        // 处理Catalog更新失败的情况,比如网络异常
        Debug.LogError("Catalog更新失败: " + catalogUpdateHandle.OperationException?.Message);
    }

    OnDownloadCompleated.Invoke();
}

关键说明

  • Addressables.UpdateCatalogAsync(true)里的true参数表示强制检查远程Catalog更新,哪怕本地有缓存也会重新校验。
  • 必须在获取下载大小前完成Catalog更新,不然用的还是旧的资源清单。
  • 如果需要主动触发清理缓存(比如用户手动点击更新),可以调用Addressables.ClearCachedCatalogs()清除缓存的Catalog,之后重新更新Catalog就能获取最新状态。

额外注意事项

  • WebGL平台下,Addressables的缓存依赖IndexedDB,别手动操作IndexedDB,尽量用官方API管理缓存,避免出现未知问题。
  • 测试更新功能时,要确保远程资源包和Catalog已经正确上传到服务器,且本地构建版本和远程版本不一致。

内容的提问来源于stack exchange,提问作者Nikolai Petrov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 19:42:40