范例内容
概述
-
通过Addressables參照包含ACB/AWB Asset的资源并播放Cue的范例。
通过按下画面的按钮,从服务器获取对应的prefab,并对其进行实例化。
- 注意
- 要正常运行本范例,需要在运行前进行Addressables的内容构建。
场景信息
中间件 | CRI ADX (CRI Atom) |
范例 | Asset Support 范例 |
存储位置 | CRIWARE/SDK/unity/samples/UnityProject/Assets/CriAssetSamples/Scenes/ |
场景文件 | Scene_02_Addressables.unity |
ACF Asset | CRIWARE/SDK/unity/samples/UnityProject/Assets/CriAssetSamples/Data/DemoProj.acf |
ACB Asset | CRIWARE/SDK/unity/samples/UnityProject/Assets/CriAssetSamples/Data/CueSheet_0.acb |
AWB Asset | CRIWARE/SDK/unity/samples/UnityProject/Assets/CriAssetSamples/Data/CueSheet_0.awb |
程序说明
首先通过Addressables获取持有prefab的列表信息的Asset,并显示各按钮。
按下按钮时,将从Addressables获取相对的prefab后进行实例化。
在各prefab上挂载有CriAtomSourceForAsset,会自动进行Cue Sheet的加载和播放。
初始化和目录信息的修改
- 在CRI Addressables初始化Addressables后需要调用目录信息的修改处理。
在完成所有内容目录的加载后调用 CriWare.Assets.CriAddressables.ModifyLocators 。
var catalogs = await Addressables.CheckForCatalogUpdates().Task;
if (catalogs.Count > 0)
await Addressables.UpdateCatalogs(catalogs).Task;
else
await Addressables.InitializeAsync().Task;
- 注意
- 注意即使不正确调用CriWare.Assets.CriAddressables.ModifyLocators ,
也可以获取内容。但在获取下载大小的API(例如 Addressables.GetDownloadSizeAsync 等)将不能正常运作。
实例化包含CRI Asset的Prefab
- 对各Prefab所对应的按钮的点击事件注册Prefab的实例化处理。
obj.GetComponentInChildren<
UnityEngine.UI.Button>().onClick.AddListener(() => {
Unload();
currentInfo = info;
info.prefab.InstantiateAsync().Completed += e => {
currentLoaded = e.Result;
UpdateView();
};
});
此时,如果依赖CRI Asset,则所需的资源将使用Addressables自动在缓存文件夹中获取。
换句话说,无论CRI Asset是否存在,也可以作为通常的Addressables内容使用。
在某些平台上,Unity规范禁用了AssetBundle缓存。
在这种情况下,CRIWARE数据将下载到临时区域中,而不是缓存文件夹。
缓存的清除
- 按下“Clear Cache”按钮时不存在实例化的Prefab时,则删除缓存。
foreach (var info in prefabList.prefabs)
Addressables.ClearDependencyCacheAsync(info.prefab);
Addressables的API会清除通常的AssetBundle缓存和CRI Asset的实际数据的缓存。
[备注]
对于Addressables 1.16.1以前的包,由于Addressables的缺陷, 所有包含CRI Asset资源的Addressables内容的缓存可能无法正常删除。