本资源缓存系统专为 AssetBundle 资源设计,支持自动缓存、加载和版本控制。 开发者无需关心资源来自网络或缓存,只需使用以下 Unity API 发起请求:
UnityWebRequestUnityWebRequestAssetBundleAddressablesWWW系统根据配置判断资源是否可缓存,并采用 LRU 策略管理本地存储。整体流程如下:

| 配置项 | 说明 |
|---|---|
enabled | 是否启用缓存,默认为 true |
cdn | 缓存的资源根路径(必填),例如:https://localhost:8080/StreamingAssets |
bundlePathIdentifier | 缓存路径标识,多个路径用 ; 分隔,例如:WebGL/bundles,则请求 URL 在 {cdn}/WebGL/bundles 之下才判断缓存。默认为空(代表所有路径都判断缓存) |
bundleHashLength | 资源文件名中的哈希长度,Unity 默认生成 32 位 |
excludeFileExtensions | 不参与缓存的文件后缀,多个后缀用 ; 分隔,默认值 .json;.hash |
defaultReleaseSize | 超限时默认清理缓存大小(单位 MB),默认 30MB |
{
"disableBundleCache": false,
"gameCDNRoot": "https://localhost:8080/StreamingAssets",
"bundlePathIdentifier": "StreamingAssets",
"excludeFileExtensions": ".json;.hash",
"bundleHashLength": 32,
"defaultReleaseSize": 30
}
符合以下格式的资源才可缓存:
hash:如 8d265a9dfd6cb7669cdb8b726f0afb1ename_hash:如 font_8d265a9dfd6cb7669cdb8b726f0afb1ename-hash:如 font-8d265a9dfd6cb7669cdb8b726f0afb1e可添加后缀,例如
.bundle、.ttf,不影响识别。
https://localhost:8080/StreamingAssets/asset1-8d26...afb1easset1-71b2...659fprivate IEnumerator LoadAssetBundle() {
var uwr = UnityWebRequest.Get("https://localhost:8080/StreamingAssets/asset1-8d26...");
yield return uwr.SendWebRequest();
var bytes = uwr.downloadHandler.data;
var assetBundle = AssetBundle.LoadFromMemory(bytes);
}
private IEnumerator LoadAssetBundle() {
var uwr = UnityWebRequestAssetBundle.Get("https://localhost:8080/StreamingAssets/asset1-8d26...");
yield return uwr.SendWebRequest();
var assetBundle = DownloadHandlerAssetBundle.GetContent(uwr);
}
使用前需在联盟配置面板勾选
使用Addressable(?)并填写URL(?),否则将无法正常加载catalog.hash和catalog.json
在 Addressables 配置中需要注意在 Advanced Options -> Bundle Naming Mode 中选择 Append Hash to Filename,构建的 Bundle 文件名才符合缓存策略,配置示意如下

private async void LoadAddressableAsset() {
var handle = Addressables.LoadAssetAsync<GameObject>("asset1");
await handle.Task;
var prefab = handle.Result;
}
asset1会被映射为带 hash 的实际资源名,使用 Addressables 不需显式拼接 URL。
cdn 和 bundlePathIdentifiername 和 hashname 的旧资源,则清理旧缓存(按 LRU 策略)