Unity AssetBundle详细解析

本文详细介绍了Unity中AssetBundle的使用方法,包括AssetBundle的概念、打包流程、依赖管理和加载方式等核心内容。并提供了实际代码示例,帮助读者更好地理解和应用。

AssetBundle使用

1.1 AssetBundle介绍

AssetBundle是将资源使用Unity提供的一种用于存储资源的压缩格式打包后的集合,它可以存储任何一种Unity可以识别的资源,如模型,纹理图,音频,场景等资源。也可以加载开发者自定义的二进制文件。他们的文件类型是.assetbundle或者

/.unity3d,他们先前被设计好,很容易就下载到我们的游戏或者场景当中。

AssetBundle(简称AB包)是一个资源压缩包,包含模型、贴图、预制体、声音、甚至整个场景,可以在游戏运行的时候被加载;

基本特点如下所示:

1AssetBundle自身保存着互相的依赖关系;

2压缩包可以使用LZMA和LZ4压缩算法,减少包大小,更快的进行网络传输;

3把一些可以下载内容放在AssetBundle里面,可以减少安装包的大小;如果所有的资源文件,全部打包到程序中,那么程序的安装包就会很大

(4)AssetBundle 文件放在服务器上,用的时候再从服务器进行加载,所以这个包根本就不在程序当中

一般情况下AssetBundle的具体开发流程如下:

(1)创建Asset bundle,开发者在unity编辑器中通过脚本将所需要的资源打包成AssetBundle文件。

(2)上传服务器,开发者将打包好的AssetBundle文件上传至服务器中。使得游戏客户端能够获取当前的资源,进行游戏的更新。

(3)下载AssetBundle,首先将其下载到本地设备中,然后再通过AsstBudle的加载模块将资源加到游戏之中。

(4)加载,通过Unity提供的API可以加载资源里面包含的模型、纹理图、音频、动画、场景等来更新游戏客户端。

(5)卸载AssetBundle,卸载之后可以节省内存资源,并且要保证资源的正常更新。

 

1.2 AssetBundle打包

1:我们首先自己进行打包,打包方式如下。新建Editor目录,写如下脚本,不同平台指定不同的目录以及BuildTarget不同即可。

参数含义:路径+选项+平台

-- Build的路径:自己定义路径即可,也可以是StreamingAssets路径

--BuildAssetBundleOptions

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

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

BuildAssetBundleOptions.ChunkBasedCompression:使用LZ4压缩,压缩率没有LZMA高,但是我们可以加载指定资源而不用解压全部。

注意:使用LZ4压缩,可以获得可以跟不压缩想媲美的加载速度,而且比不压缩文件要小。

平台:直接查看即可,各种平台

 

public class ExportAssets : MonoBehaviour

{

    [@MenuItem("AssetBundle/Build Window Bundles")]

    static void BuildAssetBundles()

    {

        //使用BuildPipeline进行打包:路径+选项+平台

        BuildPipeline.BuildAssetBundles(Application.streamingAssetsPath,

            BuildAssetBundleOptions.UncompressedAssetBundle,

            BuildTarget.StandaloneWindows);

}

 

[@MenuItem("AssetBundle/Build AssetBundles")]

    static void BuildAssetBundles()

    {

        string dir = "AssetBundles";

        if (Directory.Exists(dir) == false)

        {

            Directory.CreateDirectory(dir);

        }

        //BuildTarget 选择build出来的AB包要使用的平台

        BuildPipeline.BuildAssetBundles(dir,BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);

    }

}

 

命名规范:

1、必须小写字母,就算你大写了Unity也会自动转小写

2、命名规范:名称后要加 .unity3d 或者 .assetbundle

3、名称+“/”+另一个名称,会自动生成子选项(打包时,会自动生成一个新的名称文件夹)

 

打包之后,会生成对应的后缀为manifest的文件。什么是Manifest文件?

- CRC为校验码,通过其检查是否完整
- Assets 表示包里包含多少资源
- Dependencies 表示包有哪些依赖
注意:在加载这些包之前,也需要加载依赖的包,不然会丢失这部分内容,显示效果不正确

 

2:下面演示AssetBundle的下载,如下代码所示,使用Python开启简易文件服务器

Python 2.x版本:python -m SimpleHTTPServer 8080

Python 3.x版本:python -m http.server 8080

 

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class DownAsset : MonoBehaviour

{

    public GameObject cube;

    public GameObject sphere;

    public Transform newPos;

 

    private string url1 = "http://127.0.0.1:8080/cubeasset"; //立方体

    private string url2 = "http://127.0.0.1:8080/image";     //图片

    private string url3 = "http://127.0.0.1:8080/red";     //材质

    // Start is called before the first frame update

    void Start()

    {

      //  StartCoroutine(downloadTexture(url2));

       // StartCoroutine(downloadMat(url3));

        StartCoroutine(downloadPrefab(url1));

    }

    IEnumerator downloadTexture(string url) {

        //WWW是网络功能类:可以使用UnityWebRequest进行替换

        WWW data = new WWW(url);

        yield return data;

 

        //从内存直接加载,因为WWW已经将数据下载下来了,参数是字节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值