AssetBundle
官方文档:点击这里
资源缓存
官方文档:点击这里
引擎下载资源的逻辑如下:
1.判断资源是否在游戏包内,如果在则直接使用;
2.如果不在则查询资源是否在本地缓存中,如果在则直接使用;
3.如果不在则查询资源是否在临时目录中,如果在则直接使用(原生平台没有临时目录,跳过该步骤);
4.如果不在就从远程服务器下载资源,资源下载到临时目录后直接使用(原生平台是将资源下载到缓存目录);
5.后台缓慢地将临时目录中的资源保存到本地缓存目录中,以便再次访问时使用(原生平台跳过该步骤);
6.当缓存空间占满后资源会保存失败,此时会使用 LRU 算法删除比较久远的资源(原生平台的缓存空间没有大小限制,跳过该步骤,开发者可以手动调用清理)。
如何加载AssetBundle?
resource本质上也是一个bundle
//根据bundle名字获得
let bundle = assetManager.bundles.get("name");
//根据bundle名字获得
let bundle = assetManager.getBundle("name");
//
assetManager.resources;
关于图集
1.手动图集
可以放在resources目录下,使用TextruePacker打包即可:
优点:开发和打包环境,用法一致,可提前加载图集资源,获取图集内资源比较方便。
缺点:每次有图片变动,都需重新导出图集。
//比如 resources/atlas/main.plist,里边有一个img_0.png
resources.load("atlas/main",SpriteAtlas,(a)=>{
//从缓存池取atlas
let atlas:SpriteAtlas = resources.get("atlas/main",SpriteAtlas);
sprite.spriteFrame = atlas.getSpriteFrame("img_0");
//或者从回调直接取
sprite.spriteFrame = a.getSpriteFrame("img_0");
})
2.自动图集
不要放在resourcs目录下,否则重复导出。
优点:图片变动不影响,自动图集在构建时才最终导出
缺点:开发和打包环境,不太一致,无法提前加载图集,图集内的图片暂时没有获取方法(可能是没找到)
Filter Unused Asset:未引用的图片,将不会打包到图集,建议去掉勾选。
在这里插入代码片