unity文档:https://docs.unity3d.com/cn/current/Manual/AssetBundlesIntro.html
1. AssetBundle是什么
-
AssetBundle (简称AB包)是一个存档文件,包含可在运行时加载的特定于平台的资源(模型、纹理、预制件、音频剪辑甚至整个场景)。就是一个压缩包,可以在运行中通过代码从特定的压缩包中加载需要的AssetBundle对象(被压缩的资源)。
-
AssetBundle 可以表达彼此之间的依赖关系;例如 AssetBundle A 中的材质可以引用 AssetBundle B 中的纹理。为了通过网络进行有效传递,可以根据用例要求选用内置算法来压缩 AssetBundle(LZMA 和 LZ4)。
-
AssetBundle 可用于可下载内容(DLC),减小初始安装大小,加载针对最终用户平台优化的资源,以及减轻运行时内存压力。
2. AssetBundle 中有什么?
“AssetBundle”可以指两种不同但相关的东西:AssetBundle存档、AssetBundle对象。
1)AssetBundle存档:
存档可以被视为一个容器,就像文件夹一样,可以在其中包含其他文件。这些附加文件包含两种类型:序列化文件和资源文件。
序列化文件:包含分解为各个对象并写入单个文件的资源。
资源文件:只是为某些资源(纹理和音频)单独存储的二进制数据块,允许我们有效地在另一个线程上从磁盘加载它们。
2)AssetBundle对象
通过代码进行交互以便从特定存档加载资源的实际 AssetBundle 对象。
此对象包含一个映射,即从已添加到此存档的资源的所有文件路径 到 按需加载的资源所包含的对象之间的映射。(就是该对象中存有资源的路径,可以通过路径去加载需要的资源。)
为AssetBundle分配资源
- 从 Project 视图中选择要为捆绑包分配的资源 ;
- 在 Inspector 中检查对象;
- 在 Inspector 底部,应该会看到一个用于分配 AssetBundle 和变体的部分;
- 左侧下拉选单分配AssetBundle,而右侧下拉选单分配变量;
- 单击左侧下拉选单,其中显示“None”,表示当前注册的 AssetBundle 名称;
- 单击“New…”以创建新的 AssetBundle;
- 输入所需的 AssetBundle 名称。请注意,AssetBundle 名称支持某种类型的文件夹结构,具体取决于您输入的内容。要添加子文件夹,请用“/”分隔文件夹名称。例如:AssetBundle名称“environment/forest”将在 environment 子文件夹下创建名为 forest 的捆绑包;
- 一旦选择或创建了 AssetBundle 名称,便可以重复此过程在右侧下拉选单中分配或创建变体名称(如果需要)。构建 AssetBundle 不需要变体名称
构建AssetBundle
在 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.StandaloneWindows);
}
}
此脚本将在 Assets 菜单底部创建一个名为“Build AssetBundles”的菜单项,该菜单项将执行与该标签关联的函数中的代码。单击 Build AssetBundles 时,将随构建对话框一起显示一个进度条。此过程将会获取带有 AssetBundle 名称标签的所有资源,并将它们放在 assetBundleDirectory 定义的路径中的文件夹中。