AssetBundle

开发阶段

这里写图片描述

创建AssetBundle文件

使用BuildPipeline类的BuildAssetBundle进行文件创建

public static AssetBundleManifest BuildAssetBundles(string outputPath, BuildAssetBundleOptions assetBundleOptions, BuildTarget targetPlatform);

BuildAssetBundleOptions

特点
None使用LZMA算法压缩,压缩的包更小,但是加载时间更长。使用之前需要整体解压。一旦被解压,这个包会使用LZ4重新压缩。使用资源的时候不需要整体解压。在下载的时候可以使用LZMA算法,一旦它被下载了之后,它会使用LZ4算法保存到本地上。
UncompressedAssetBundle不压缩,包大,加载快
ChunkBasedCompression使用LZ4压缩,压缩率没有LZMA高,但是我们可以加载指定资源而不用解压全部。

AssetBundle分组策略
1,把经常更新的资源放在一个单独的包里面,跟不经常更新的包分离
2,把需要同时加载的资源放在一个包里面
3,可以把其他包共享的资源放在一个单独的包里面
4,把一些需要同时加载的小资源打包成一个包
5,如果对于一个同一个资源有两个版本,可以考虑通过后缀来区分 v1 v2 v3 unity3dv1 unity3dv2

上传创建好的AssetBundle到外部存储

将AssetBundle文件上传到远程服务器供已经开发好的应用或游戏进行下载和更新资源

运行阶段

这里写图片描述

下载AssetBundle文件
  • 网上下载无需缓存:直接通过WWW对象实现
  • 网上下载需要缓存:通过WWW的LoadFromCacheDownload静态方法处理
  • 从本地文件或内存中直接下载:通过AssetBundle类的LoadFromFile,LoadFromFileAsync,LoadFromMemory,LoadFromMemoryAsync。
加载AssetBundle资源
方法描述
Object LoadAsset(string name);通过name来加载资源
AssetBundleRequest LoadAssetAsync(string name);与LoadAsset类似,读取时不会堵塞主线程
Object[] LoadAllAssets(Type type);从AssetBundle文件读取所有资源对象,type用来过滤返回的对象类型
AssetBundleRequest LoadAllAssetsAsync();加载所有资源,不会堵塞主线程

加载Manifests文件可以处理资源的依赖

AssetBundle assetBundle = AssetBundle.LoadFromFile(manifestFilePath);
AssetBundleManifest manifest = 
assetBundle.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
string[] dependencies = manifest.GetAllDependencies("assetBundle"); 
foreach(string dependency in dependencies)
{
    AssetBundle.LoadFromFile(Path.Combine(assetBundlePath, dependency));
}
AssetBundle的卸载

void Unload(bool unloadAllLoadedObjects);

unloadAllLoadedObjects的值描述
false卸载所有没用被使用的资源
true卸载所有资源,即使有资源被使用着
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值