AssetBundle

基本概念和知识

定义:
顾名思义,资源包,是Unity提供的一种以压缩格式打包后存储资源的集合。类似于压缩文件,可压缩资源包括:模型,贴图,预制体,音效,材质球等,唯独不能将C#代码打包进去。
作用:
1、可用于可下载内容(DLC),减小初始安装大小,加载针对最终用户平台优化的资源,以及减轻运行时内存压力。4
2、压缩包可以使用LZMA和LZ4压缩算法,减少包大小,更快的进行网络传输。
3、存储位置,存储方式可以自定义,后期可以动态更新。
4、资源热更新
安装官方打包工具:
Window->packageManager->Asset Bundle Browser
在这里插入图片描述
Asset Bundle主要结构
根据官方文档描述,主要分为两种类型:

一个序列化文件:
包含分解为各个对象并写入此单个文件的资源。

资源文件:
某些资源(纹理和音频)单独存储的二进制数据块,允许 Unity 高效地在另一个线程上从磁盘加载它们。

基本流程

代码打包

为 AssetBundle 分配资源

1、从 Project 视图中选择要为捆绑包分配的资源
2、选中指定资源目标,分配 AssetBundle 和变体。
在这里插入图片描述点击New创建,输入想要的名称,不区分大小写,大写默认转换为小写,第二个为后缀,后缀名可以随便取,但是不可以是某种特定的文件格式,如rar,jpg等等。

AssetBundle支持文件夹结构,使用“/”来划分文件夹,例如MyAssets/01就是在MyAssets文件夹下面创建一个01文件夹。

基本代码:
首先需要在Assets下创建一个Editor特殊文件夹并在文件夹内创建以下脚本文件。

using UnityEditor;
using System.IO;

public class CreateAssetBundles
{
    [MenuItem("Assets/Build AssetBundles")]
    static void BuildAllAssetBundles()
    {
        string assetBundleDirectory = "Assets/AssetBundles";
        //检查路径是否存在不存在就创建
        if (!Directory.Exists(assetBundleDirectory))
        {
            Directory.CreateDirectory(assetBundleDirectory);
        }
        BuildPipeline.BuildAssetBundles(assetBundleDirectory,
                                BuildAssetBundleOptions.None,
                                BuildTarget.StandaloneWindows64);
        //参数
        //1、要打包到的路径   Assets/AssetBundles
        //2、打包的设置       无
        //3、要打包到的平台   windows64位
    }
}

点击对应按钮即可打包

本地资源加载与卸载

1、创建空物体并创建相应脚本挂载到物体上。
2、创建脚本如下:

using UnityEngine;

public class LoadRes : MonoBehaviour
{
    void Start()
    {
        //从指定路径加载AssetBundle对象
      AssetBundle asset= AssetBundle.LoadFromFile("Assets/AssetBundles/turret.ab");
      GameObject turret= 
      asset.LoadAsset<GameObject>("Turret 1a"); //参数为之前创建AssetBundle的物体的名字
      Instantiate(turret);
    }
}

如果你忘记自己打包资源的名字,可以参考一下做法:

using UnityEngine;
public class CheckRes : MonoBehaviour
{
    void Start()
    {
        //从指定路径加载AssetBundle对象
      AssetBundle asset= AssetBundle.LoadFromFile("Assets/AssetBundles/turret.ab");
        //加载所有的资源
      Object[] objects = asset.LoadAllAssets<GameObject>();
        //遍历所有资源名称
        foreach (var item in objects)
        {
            Debug.Log(item.name);
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值