AssetBundle资源管理
关于Hololens2的文件路径问题一开始已经讲过了,下面为链接:
HoloLens下载、读取与存储Json文件路径问题(个人Hololens2进阶开发小总结一)
Unity中提供的AssetBundle资源管理实在很方便。然后在Unity编辑下打包好后的AB包部署在HoloLens2上却无法使用,这到底是个怎么回事?
一、AssetBundle是什么?
AssetBundle我们简称其为AB包,它是一个用于特定平台的资产压缩包,有点类似于压缩文件。这里的资产包括:模型,贴图,预制体,材质球等。因此AB包的作用实际上和Resources文件夹的作用是很像的。但两者之间有很大的不同。Resources文件夹在打包的时候其中的内容就定死了,只读没有办法修改,而AB包却可以自定义存储位置,自定义压缩方式,以及最重要的它可以有后续的更新。
二、Hololens2上的AssetBundle包导出
众所周知,Hololens2属于UWP平台,那么PC端的Unity编辑器下打包出来的AB包可不可以用呢?答案是不可以。
在网上关于资源导出AB包的方式有很多,文章就不再过多阐述,普遍的导出方式都为BuildTarget.StandaloneWindows
这种方式其实是只针对Windows上的X64、X86应用的,但Hololens2上的应用属于Windows Store Apps的,上诉打包出来的资源部署在Hololens2上是毫无作用可言。下图为官方API:
因此,我们在导出的时候只需要修改导出目标就行了
public class ExportAB
{
[MenuItem("AB包/导出")]
public static void Export()
{
string path = Application.dataPath;
path = path.Substring(0, path.Length - 6) + "ab";
Debug.Log(path);
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
BuildPipeline.BuildAssetBundles(
path,
BuildAssetBundleOptions.None,
BuildTarget.WSAPlayer);
}
}
注意,在这里导出的AB包是在PC端上的,要实现热更新就必须把这个AB包放在服务器进行访问下载,或者通过Hololens2后台导进Hololens2
三、Hololens2上读取AssetBundle包
读取的操作其实就跟在Unity编辑器下的操作一样,但是要注意导出的AB包存放路径问题,具体查看上上一期内容
HoloLens下载、读取与存储Json文件路径问题(个人Hololens2进阶开发小总结一)
1.定义和指定路径
private AssetBundleCreateRequest zhidong;
savepath = Application.persistentDataPath + "/ab";
2.读入数据
IEnumerator LoadAB(string assetName)
{
zhidong = AssetBundle.LoadFromFileAsync(savepath + "/wsazhidong");
yield return zhidong;
GameObject chilun = (GameObject)Instantiate(zhidong.assetBundle.LoadAsset(assetName));
chilun.transform.position = go.transform.position;
}
热更新
热更新其实简单来讲就是服务端更新数据,客户端进行更新展示。
总结
在HoLolens2上进行热更新其实原理一样,HoLolens2充当客户端的角色,通过某事件向服务器发送更新请求,服务器在AB包中进行修改、增添或删除,Hololens2更新后即可查看。
关于这方面的资料会在下一期整理并展示在项目中的热更新将如何使用。
|