AssetBundle Browser 教程
一、插件功能1、插件是发布AB包的工具
AssetBundle Browse可以将项目中的资源打包成AB包,发布游戏后,项目将通过加载StreamingAssets中AB包的形式,加载所需资源,而不是像之前那样,从Assets中进行加载。1、AB包是什么
AB包全名AssetBundle(资源包)。是一种Unity提供的用于存放资源的包。通过将资源分布在不同的AB包中可以最大程度地减少运行时的内存压力,并且可以有选择地加载内容。2、为什么要用AB包
Ⅰ、热更新要热更新需要确保AB包打出来的资源具有唯一性,且相同资源的AB包检验码相同。Ⅱ、Resources加载存在问题Resources加载虽然简单方便,但是也有很多问题:
[*]对内存管理造成一定的负担。
[*]在打开应用时加载时间很长。
[*]Resources文件夹下的所有资源统一合并到一个序列化文件中(可以看成统一打一个大包,巨型AB包有什么问题它就有什么问题),对资源优化有一定的限制。
因此不建议大量使用Resources。
二、安装插件的方式
1、PackageManager安装
橙子测试在Unity2019.3版本中,PackageManager中便有此插件, 同学们可以先看看自己版本的Unity是否可以直接安装。
https://img-blog.csdnimg.cn/14e3c6cc2ef74a3db2ae68e080f45b33.png
2、GitHub下载
有的Unity版本是没有PackageManager的,或者PackageManager中没有此插件。 那么我们可以去GitHub下载此插件:传送门三、插件使用方法介绍
下面介绍如何将Assets中的资源打成AB包。1、实现导出一个AB包
我们以该模型为例,将该模型打成AB包。
https://img-blog.csdnimg.cn/e80a0248145b447ea59e3ef7c715587e.png
Ⅰ、制成预制体,并设定AssetBundle如下图所示。 AssetBundle名字只能是小写。
https://img-blog.csdnimg.cn/5485d416a210461fa6fb6c6904f9eff9.png
Ⅱ、AssetBundle Browser界面介绍Window - AssetBundle Browser,可打开配置界面。Configure界面
我们能看到所有被标记为AssetBundle的文件。
https://img-blog.csdnimg.cn/c39b361f83ce4093a0f395a4869b6450.png
Build界面
该界面是进行打包的界面。
[*]Build Target:选择发布的平台
[*]Output Path:输出路径
[*]Clear Folders:构建之前清空文件夹(会把文件夹删除)
[*]Copy to StreamingAssets:拷贝至StreamingAssets文件夹
[*]Compression:选择压缩格式
https://img-blog.csdnimg.cn/6ac64b9551e247e495a5e9d17899f153.png
Inspect界面
这个界面会展示已经打成AB包的包内部信息。选择左上角的 Add Folder,选择AssetBundle所在的目录。然后该界面左侧会列出该文件夹下的所有AB包。在左侧展示的文件列表中任选一个AssetBundle,右边会展示AssetBundle内部的信息,包括它包含的资源,预加载的组件和依赖等等。右上角的 -键可以从列表中删除当前选中的文件夹。
https://img-blog.csdnimg.cn/6a377df1b6cd4b43ab369c48f7534e18.png
Ⅲ、完成打包点击Build即可对当前Browser中所有的bundle进行打包,选择路径,即可在该路径下看到生成的资源文件。若你勾选了Copy to StreamingAssets,还会自动帮你拷贝到StreamingAssets文件夹
https://img-blog.csdnimg.cn/a8a389abdf5c461c9b5400a00c2b98d9.png
2、实现资源复用
📢 什么是资源复用
在打包的过程中,有很多资源都是重复的。例如:
[*]多个预制体使用的同一个模型,预制体只是材质颜色不同。
[*]有图片,被多个预制体使用。
如果分别打AB包,这样会造成包体过大。
AssetBundleBrowser提供了解决方法,用创建共享AB包的形式,很好的解决掉了这一问题,实现了资源的复用。Ⅰ、一个资源重复的现象
我们实现一个资源重复的现象:
[*]制作Trigger的复制预制体,新建材质球,替换它的原始材质球。
[*]给该预制体的AssetBundle重命名为tiggernew
https://img-blog.csdnimg.cn/1abab1ceb4ca4b50abd6c25d47b94957.png
Ⅱ、创建共享AB包
我们此时再次打开AssetBundle Browser,可以看到很多感叹号。
[*]左侧预制体的感叹号,代表它们其中有重复的资源
[*]右侧包体内的感叹号,代表是这些资源重复
https://img-blog.csdnimg.cn/cdcc10e1cf88488d8d89843061aa9815.png
创建res AB包: 在左侧右键,Add new bundle,创建一个res包(该名子可自行命名)。后面我们用它存储重复的资源。
https://img-blog.csdnimg.cn/f30000efe87e471b8a80b50c1ec03821.png
将重复资源拖到res包内: 将tiger中的重复资源拖到res包内,我们能看到拖拽完成后,其他ab包内重复的资源也消失了。现在只有一份资源。
https://img-blog.csdnimg.cn/4d19c98cd7804fccbd78ef8f6c3a2e73.png
Ⅲ、完成打包
同样的操作,点击Build,完成AB包的打包。 此时AB包内容如下:
https://img-blog.csdnimg.cn/e557e78b71af4b2a935e9aba93657674.png
四、代码实例化AB包资源
下面我们完整做完整个流程:使用代码,去加载AB包中的老虎,完成我们的整个测试。将该脚本挂载在场景中的物体上,运行项目时,便会加载出老虎了!
using System.IO;
using UnityEngine;<p></p>
<p style="line-height: 30px; text-indent: 2em;">public class ABTest : MonoBehaviour
{
void Start()
{
//加载AssetBundle之前,先加载依赖的Bundle
//字符串"StandaloneWindows",是一个文件。这个文件的名字,是根据打包脚本,打包到哪个文件夹下,这个文件就叫什么名字。
//字符串"AssetBundleManifest",是固定写法。
AssetBundle assetBundle =
AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "StandaloneWindows"));
AssetBundleManifest manifest = assetBundle.LoadAsset<AssetBundleManifest>("AssetBundleManifest");</p>
<p style="line-height: 30px; text-indent: 2em;"> //字符串"tiger",是你要加载的老虎模型预制体的名字
foreach (var item in manifest.GetAllDependencies("tiger"))
{
AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, item));
}</p>
<p style="line-height: 30px; text-indent: 2em;"> //------若要加载的文件只是一个视频或者其他,无依赖,可只做下面,直接加载Bundle文件,直接读Bundle即可------//</p>
<p style="line-height: 30px; text-indent: 2em;"> //现在便可以加载模型了
string modelPath = Path.Combine(Application.streamingAssetsPath, "tiger");
AssetBundle useAb = AssetBundle.LoadFromFile(modelPath);
GameObject obj = useAb.LoadAsset<GameObject>("Tiger");</p>
<p style="line-height: 30px; text-indent: 2em;"> Instantiate(obj, transform);
}
}</p>好啦,这就是本章所有内容 ~
页:
[1]