AssetBundle学习

官方文档:AssetBundle 工作流程 - Unity 手册 (unity3d.com)

之前写的博客:AssetBundle学习_zaizai1007的博客-CSDN博客

使用流程图:

AssetBundle学习_第1张图片

  •  1,指定资源的AssetBundle属性     (xxxa/xxx)这里xxxa会生成目录,名字为xxx
  • 2,构建AssetBundle包
  • 3,上传AB包
  • 4,加载AB包和包里面的资源

BuildAssetBundleOptions

BuildAssetBundleOptions.None:使用LZMA算法压缩,压缩的包更小,但是加载时间更长。使用之前需要整体解压。一旦被解压,这个包会使用LZ4重新压缩。使用资源的时候不需要整体解压。在下载的时候可以使用LZMA算法,一旦它被下载了之后,它会使用LZ4算法保存到本地上。

BuildAssetBundleOptions.UncompressedAssetBundle:不压缩,包大,加载快

BuildAssetBundleOptions.ChunkBasedCompression:使用LZ4压缩,压缩率没有LZMA高,但是我们可以加载指定资源而不用解压全部。 注意使用LZ4压缩,可以获得可以跟不压缩想媲美的加载速度,而且比不压缩文件要小。

Asset Bundle 文件

AssetBundle学习_第2张图片

Asset Bundle

  1. AssetBundle.LoadFromMemoryAsync
  2. AssetBundle.LoadFromFile
  3. WWW.LoadFromCacheOrDownload
  4. UnityWebRequest 

Loading Assets from AssetBundles 

//一般
T objectFromBundle = bundleObject.LoadAsset(assetName);

//GameObject
GameObject gameObject = loadedAssetBundle.LoadAsset(assetName);

//所有资源
Unity.Object[] objectArray = loadedAssetBundle.LoadAllAssets();

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

AssetBundle assetBundle = AssetBundle.LoadFromFile(manifestFilePath);
AssetBundleManifest manifest = 
assetBundle.LoadAsset("AssetBundleManifest");

//Pass the name of the bundle you want the dependencies for.
string[] dependencies = manifest.GetAllDependencies("assetBundle"); 
foreach(string dependency in dependencies)
{
    AssetBundle.LoadFromFile(Path.Combine(assetBundlePath, dependency));
}

 AssetBundle的卸载

卸载有两个方面

  1. 减少内存使用
  2. 有可能导致丢失

所以什么时候去卸载资源

AssetBundle.Unload(true)卸载所有资源,即使有资源被使用着     

  1. (在关卡切换、场景切换
  2. 资源没被用的时候 调用)

AssetBundle.Unload(false)卸载所有没用被使用的资源     

个别资源怎么卸载

  1. 通过 Resources.UnloadUnusedAssets.  
  2. 场景切换的时候    

你可能感兴趣的:(unity,AssetBundle)