Unity:AssetBundle打包

  • 时间:
  • 来源:互联网
  • 文章标签:

1.给资源进行分类命名并且加对应的后缀
在这里插入图片描述
2.创建打包后的文件夹(此处用StreamingAssets文件夹下的Windows文件夹为例

3.在工具类中写打包的方法
PS:每次资源变换之后都要把之前打包的文件全部删掉再打包,否则加载的还是原来打包的文件
在这里插入图片描述
BuildPipeline.BuildAssetBundles

选项:
CompleteAssets ,用于保证资源的完备性,默认开启;
CollectDependencies,用于收集资源的依赖项,默认开启;
DeterministicAssetBundle,用于为资源维护固定ID,默认开启;
ForceRebuildAssetBundle,用于强制重打所有AssetBundle文件,新增;
IgnoreTypeTreeChanges,用于判断AssetBundle更新时,是否忽略TypeTree的变化,新增;
AppendHashToAssetBundleName,用于将Hash值添加在AssetBundle文件名之后,开启这个选项可以直接通过文件名来判断哪些Bundle的内容进行了更新(4.x下普遍需要通过比较二进制等方法来判断,但在某些情况下即使内容不变重新打包,Bundle的二进制也会变化),新增。
ChunkBasedCompression,用于使用LZ4格式进行压缩,5.3新增。

工具类代码如下:
using UnityEngine;
using UnityEditor;

public class MyTest : Editor
{
[MenuItem(“Itools/BuilderOne”, false, 34)]
public static void TestOne()
{
string outPath = Application.streamingAssetsPath + “/Windows”;

    //AB包打包后的存放路径,AB包的压缩格式选项都开启,打包的AB包的版本为Windows64位的
    BuildPipeline.BuildAssetBundles(outPath, 0, BuildTarget.StandaloneWindows64);

    Debug.Log("打包完成!!!");
}

}

打包完成后Windows文件夹下会有一些文件(一开始可能显示不出来,刷新一下就好
在这里插入图片描述
在这里插入图片描述

卸载AssetBundle原理

首先卸载依赖关系,采用引用计数的方式。
有一个资源依赖此资源,就让此资源的计数+1,卸载资源的话就让卸载的资源的依赖资源的计数-1,当依赖资源的计数为0时,就卸载掉依赖资源,以此类推,最终卸载掉所有资源(注意,一定是先卸载实例化到场景中的资源再卸载依赖资源,否则会出现其他现象

加载及卸载一个AssetBundle

在这里插入图片描述
1.加载压缩包到内存中
1.从服务器中加载
2.从硬盘中加载
卸载此内存:AssetBundle.Unload(false)
AssetBundle.Unload(true)是卸载第一块和第二块内存,一般不这么做
2.将压缩包解压
用AssetBundle.Load()进行解压资源(此资源包括可以实例化的资源以及资源所需要的依赖资源
卸载:可实例化的资源:Resources.UnloadAsset(Obj)
资源依赖项:Resources.UnloadUnusedAsset()(必须是没有其他资源依赖此资源,否则报错
3.将资源实例化到场景中
用Instantiate(Obj)实例化资源
卸载:Destroy()

本文链接http://www.taodudu.cc/news/show-83083.html