本资源缓存系统专为 AssetBundle 资源设计,支持自动缓存、加载和版本控制。 开发者无需关心资源来自网络或缓存,只需使用以下 Unity API 发起请求:
UnityWebRequest
UnityWebRequestAssetBundle
Addressables
WWW
系统根据配置判断资源是否可缓存,并采用 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
:如 8d265a9dfd6cb7669cdb8b726f0afb1e
name_hash
:如 font_8d265a9dfd6cb7669cdb8b726f0afb1e
name-hash
:如 font-8d265a9dfd6cb7669cdb8b726f0afb1e
可添加后缀,例如
.bundle
、.ttf
,不影响识别。
https://localhost:8080/StreamingAssets/asset1-8d26...afb1e
asset1-71b2...659f
private 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
和 bundlePathIdentifier
name
和 hash
name
的旧资源,则清理旧缓存(按 LRU 策略)