AssetBundlest

一、AssetBundle的定义和作用
1、AssetBundle是一个压缩包,这个包包含模型、贴图、预制体、声音、甚至是整个场景,可以再游戏运行的时候被加载。
2、AssetBundle自身保存着互相的依赖关系。比如,一个包保存模型的,另一个包保存贴图的,那模型就有可能依赖于贴图。
3、压缩包可以使用LZMA和LZ4压缩算法,减少包大小,这样可以更快的进行网络传输(游戏内的资源跟新)。
4、把一些可以下载内容放在AssetBundle里面,可以减少安装包的大小。
二、什么是AssetBundle
可以归为两点:
1、它是一个存在于硬盘上的文件,可以称之为压缩包。这个压缩包可以认为是一个文件夹,里面包含了多个文件。这些文件可以分为两类:serialized file和resource files(序列化文件和源文件)。
serialized file:资源被打碎放在一个对象中,最后统一呗写进一个单独的文件(只有一个)。只有在unity场景,被实例化出来才能看到。
resource files:某些二进制资源(图片、声音)被单独保存,方便快速加载。
2、它是一个AssetBundle对象,我们可以通过代码从一个特定的压缩包加载出来的对象,这个对象包含了所有我们当初添加到这个压缩包里面的内容。我们可以把这个对象加载出来使用。
三、AssetBundle使用流程
1、指定资源的AssetBundle属性
2、构建AssetBundle包
3、上传AB(服务器)
4、加载AB包和包里面的资源
注意:不要把这个AB包直接放到apk里面,这样会导致包很大,影响用户的安装和体验,没办法更新资源。

using UnityEditor;
using System.IO;

public class CreatAssetBundles {

    [MenuItem("Assets/Build AssetBundles")]
    static void BuildAllAssetBundles()
    {
        //文件夹路径
        string path = "Assets/AssetBundles";
        //是否存在这个文件
        if (!Directory.Exists(path))          
        {
            //创建该文件夹
            Directory.CreateDirectory(path);
        }
        //打ab包
        //参数1:路径; 
        //参数2:压缩方式
        /*BuildAssetBundleOptions.None
         * 使用LAMA算法压缩,压缩的包更小,但是加载时间长。
         * 使用之前需要整体解压。一旦被解压,这个包会使用LZ4重新压缩。
         * 使用资源的时候不需要整体解压。在下载的时候可以使用LZMA算法,一旦它被下载了之后,他会使用LZ4算法保存到本地
         */
        //BuildAssetBundleOptions.UncompressedAssetBundle:不压缩,包大,加载快
        /*BuildAssetBundleOptions.ChunkBasedCompression
            使用LZ4压缩,压缩率没有LZMA高,但是我们可以加载指定资源而不用解压全部
            可以获得跟不压缩相媲美的加载速度,而且比不压缩文件要小
        */
        //参数3:要使用的平台
        BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LoadFromFileLocal : MonoBehaviour {

	//从本地加载ab资源
	void Start ()
    {
        //在使用资源的时候要先把它所依赖的一些资源加载出来,这样才不会导致材质丢失
        AssetBundle ab_share = AssetBundle.LoadFromFile("Assets/AssetBundles/share.lanyue");
        AssetBundle ab = AssetBundle.LoadFromFile("Assets/AssetBundles/cubewall1.lanyue");
        if (ab == null)
        {
            Debug.LogError("Failed to load AssetBundle!");
            return;
        }
        //加载这个预制
        GameObject prefab = ab.LoadAsset<GameObject>("cubewall1");
        //实例化生成这个预制
        Instantiate(prefab);
	}
}

三种压缩方式的结果:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值