Assetbundle创建与加载

今天看到一篇关于AssetBundle的文章,觉得挺详细页挺不错的,用作学习和记录,这里转载一下,原文链接:https://www.cnblogs.com/tekkaman/p/4040081.html

1.Assetbundle创建与加载

  Unity有两种动态加载机制:一种是Resource.Load。一种是AssetBundle。Assetbundle是Unity Pro提供的功能,它可以把多个游戏对象或者资源二进制文件封装到Assetbundle中。供加载、解压使用。

2.创建Assetbundle

使用方法 BuildPipeline.BuildAssetBundle (Object, assets , pathName , options , targetPlatform) 

参数1:它只能放一个对象。

参数2:可以放入一个数组对象。

参数3:保存路径。

参数4:BuilderAssetBundleOptions

       CollectDependencies // 包含所有依赖关系。

       CompleteAssets//强制包含整个资源

       DisableWriteTypeTree//在资源包不包含类型信息。

       DeterministicAssetBundle//编译资源包使用一个哈希表储存对象ID在资源包中。

       UncompressedAssetBundle//不压缩Assetbundle,默认会进行压缩

参数5:平台

       特别注意的是,电脑上和手机上打出来的Assetbundle不能混用,不同平台只能用自己的。

3.载入Assetbundle

       本文写的时候还是使用www加载,但是目前Unity将www换成了UnityWebRequest,这里贴上一个用法比较全的文章链接:https://blog.****.net/qwe25878/article/details/85051911

       载入成功后就可以通过资源名使用bundle.assetBundle.Load方法获取资源

Assetbundle创建与加载

       加载网络或本地Assetbundle文件会在本地创建一个Assetbundle文件内存镜像,使用Assetbundle.Load会从Assetbundle的内存镜像中读取并创建一个Asset对象,创建的同时会分配相应的内存用于反序列化存储。

4.内存释放

Assetbundle创建与加载

最后在使用Assetbundle时候最好的方式是。

  创建时:使用Assetbundle.load加载所需的asset,加载完后立即Assetbundle.Unload(false),释放Assetbundle文件本身的内存镜像,但不销毁加载的Asset对象。这样遍可以释放一部分内存。

  释放时。如果是通过Instantiate的对象,用Destroy进行销毁。在合适的地方使用Resources.UnloadUnusedAssets,释放已经没有引用的Asset。Unity底层会对对象引用进行计数,如果引用为0.执行UnloadUnusedAssets就可以全部释放。