基本概念和知识
定义: 顾名思义,资源包,是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、创建空物体并创建相应脚本挂载到物体上。 2、创建脚本如下:
using UnityEngine;
public class LoadRes : MonoBehaviour
{
void Start()
{
AssetBundle asset= AssetBundle.LoadFromFile("Assets/AssetBundles/turret.ab");
GameObject turret=
asset.LoadAsset<GameObject>("Turret 1a");
Instantiate(turret);
}
}
如果你忘记自己打包资源的名字,可以参考一下做法:
using UnityEngine;
public class CheckRes : MonoBehaviour
{
void Start()
{
AssetBundle asset= AssetBundle.LoadFromFile("Assets/AssetBundles/turret.ab");
Object[] objects = asset.LoadAllAssets<GameObject>();
foreach (var item in objects)
{
Debug.Log(item.name);
}
}
}
|