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

Unity中如何删除缓存内指定Bundle文件以更新Unity Bucket资产

如何删除Unity缓存中的特定AssetBundle文件(无需清空全部缓存)

Unity的Caching API提供了针对单个AssetBundle的缓存管理能力,不用调用Caching.ClearCache()清空所有缓存就能删除指定Bundle的旧缓存,具体实现步骤如下:

核心实现思路

Unity通过下载URL来唯一标识缓存中的AssetBundle,结合Caching.GetCachedVersions()和Caching.DeleteCachedVersion()方法,就能精准定位并删除目标Bundle的缓存。

具体操作步骤

  1. 获取目标Bundle的缓存版本列表
    使用Caching.GetCachedVersions(string bundleUrl)传入Bundle的完整下载URL(必须和之前下载时的URL完全一致,包括路径、参数等),该方法会返回该URL对应的所有缓存版本的Hash128列表。

  2. 删除指定版本的缓存
    遍历获取到的哈希列表,调用Caching.DeleteCachedVersion(string bundleUrl, Hash128 hash)删除对应版本的缓存;如果不需要保留任何旧版本,直接遍历所有哈希删除即可。

代码示例

using UnityEngine;
using System.Collections.Generic;
using UnityEngine.Networking;

public class SpecificBundleCacheHandler : MonoBehaviour
{
    // 目标Bundle的完整下载URL,需与下载时的URL完全匹配
    [SerializeField] private string targetBundleUrl = "https://your-unity-bucket-path/target.bundle";

    // 删除指定Bundle的所有缓存版本
    public void ClearTargetBundleCache()
    {
        List<Hash128> cachedVersions = Caching.GetCachedVersions(targetBundleUrl);
        
        if (cachedVersions.Count == 0)
        {
            Debug.Log("该Bundle无缓存记录");
            return;
        }

        foreach (var versionHash in cachedVersions)
        {
            bool isDeleted = Caching.DeleteCachedVersion(targetBundleUrl, versionHash);
            Debug.Log(isDeleted ? $"成功删除缓存版本: {versionHash}" : $"删除缓存版本失败: {versionHash}");
        }
    }

    // 先清缓存再下载新Bundle的示例
    public IEnumerator DownloadUpdatedBundle()
    {
        // 先清除旧缓存
        ClearTargetBundleCache();

        // 发起新的Bundle下载请求
        using (var request = UnityWebRequestAssetBundle.GetAssetBundle(targetBundleUrl))
        {
            yield return request.SendWebRequest();

            if (request.result == UnityWebRequest.Result.Success)
            {
                AssetBundle newBundle = DownloadHandlerAssetBundle.GetContent(request);
                Debug.Log("新Bundle下载完成,可进行后续资源加载");
                // 这里添加资源加载逻辑
            }
            else
            {
                Debug.LogError($"Bundle下载失败: {request.error}");
            }
        }
    }
}

注意事项

  • URL匹配要求:缓存的索引依赖完整URL,哪怕URL中一个参数、路径字符不同,Unity都会视为不同的Bundle,所以必须保证传入的URL和下载时完全一致。
  • 版本哈希的使用:如果你的Bundle有版本管理(比如用哈希作为版本标识),可以只删除特定哈希的旧版本,保留其他需要的版本。
  • 平台兼容性:在iOS、Android等移动平台,缓存目录的系统权限可能影响删除操作,测试时需验证各平台的运行效果。
  • Unity版本适配:上述API适用于Unity 2017及以上版本,旧版本的Caching API可能存在差异,需对应调整。

内容的提问来源于stack exchange,提问作者Excellent AC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 09:47:32