Unity3D---AssetBundle打包

一、AssetBundle概述

用处:用于压缩包括model,texture,material,prefabs,甚至整个scene的资源,在游戏运行时再加载出来

AssetBundle(简称AB)打包特点:

1.保存资源之间相互依赖的关系

2.AB压缩算法分为:LZMA算法和LZ4算法,也可以不压缩

3.可以把下载内容放到AB包中,减少安装包的大小


二、AB打包使用流程:

1.在Unity中指定资源的AB属性

2.编写代码通过Editor Scripts构建AB包(搜索资源是否带有AB标签)

3.上传AB包(服务器)

4.加载AB包

5.通过AB包获取包里面的内容


三、使用代码构建AB包

编写BuildAB.cs完成AB包的构建,代码如下

using System.IO;
using UnityEditor;

public class BuildAB 
{
    [MenuItem("Asset/Build AB")]//在菜单栏中创建函数入口
    static void BuildAllAssetBundles()
    {
        //判断路径是否存在,system.id命名空间
        string dir = "AssetBundles";
        if(Directory.Exists(dir)==false)
        {
            Directory.CreateDirectory(dir);
        }
        //参数分别为1.path 2.压缩选项 3.目标平台
        BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.StandaloneOSX);
    }

}

注意:构建AB包的脚本属于编辑器脚本,该脚本引用UnityEditor命名空间,必须放置在Editor/目录下,否则会出现"‘UnityEditor’ can not found"的Error

构建成功后目录下多出一个AssetBundle文件夹,文件夹下的路径根据AB标签以及后缀生成次级目录以及后缀名


四、使用AB包中的内容

当我们的AB包已经下载至本机时,通过代码获得AB包并对其操作,代码如下:

public class LoadAB : MonoBehaviour {
	void Start () {
        
        AssetBundle ab = AssetBundle.LoadFromFile("AssetBundles/prefabs/capsule.yes");//加载AB时,路径是定义的标签名
        GameObject capsulePrefab = ab.LoadAsset<GameObject>("Capsule");//加载GameObject时name是prefab的名字
        //对获得到的对象操作
        Instantiate(capsulePrefab);

	}

}
获取所有资源:
        object[] objs = ab.LoadAllAssets();
        foreach(object o in objs)
        {
            Debug.Log(o);
        }

五、通过服务器下载AB包

public class LoadAB : MonoBehaviour {
    IEnumerable Start () {

        string uri = @"127.0.0.1/AssetBundles/capsule.yes";//指定服务器地址
        UnityWebRequest unityWebRequest = UnityWebRequest.GetAssetBundle(uri);//引用UnityEngine.Networking
        yield return unityWebRequest.SendWebRequest();
        AssetBundle ab = DownloadHandlerAssetBundle.GetContent(unityWebRequest);


	}

}

六、AB包的卸载

卸载有两点需要注意:

1.能够减少内存的使用

2.对卸载不进行规划的话可能造成丢失(依赖)

        ab.Unload(true);//卸载所有资源
        ab.Unload(false);//卸载未被使用的资源

七、Manifest文件的信息

构建AB包完成后,主要目录下生成一个主要的manifest文件,包含了该AB包的所有资源以及信息以及它们的依赖

而相同AB标签的物品中也能生成一个manifest,包含了该物品自身的依赖

manifest都包含CRC校验码用于校验文件是否完整

猜你喜欢

转载自blog.csdn.net/amcp9/article/details/80952812
今日推荐