专栏
本专栏将介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用。
链接: Unity开发AR系列
热更数据制作:制作热更数据-AR图片识别场景
插件简介
通过热更技术实现动态地加载AR场景,简化了AR开发流程,让用户可更多地关注Unity场景内容的制作。
"EnvInstaller..."支持HybridCLR和ARCore的一键安装。
"AR SDK..."基于HybridCLR和ARFoundation实现,使热更技术贯穿AR开发的全流程。
包含热更数据制作与导出、热更数据上传与下载、热更数据的版本控制与数据加载
资源下载
"EnvInstaller":点击下载
"AR SDK":点击下载
运行AR示例程序
在前面的《使用插件一键安装》、《配置带HybridCLR的AR开发环境》已介绍如何使用插件导入ARFoundation(ARCore)、HybridCLR相关的Package,以及如何划分程序集。
运行示例
划分程序集
示例中包含如下程序集定义,这里需要在"HybridCLR Settings"中划分程序集
程序集 | 类型 | 简介 |
---|---|---|
Holo.Demo | 热更程序集 | 包含各单项功能示例的程序集,示例Demo中使用 |
DynamicScene | 热更程序集 | AR动态场景示例的程序集,示例Demo中使用 |
Holo.Runtime | AOT程序集 | AR SDK核心程序集,已编译成dll并添加至项目中。 |
Assembly-CSharp | AOT/热更都可 | Unity的默认全局程序集 |
打包程序
-
参考之前的文档,在"HybridCLR Settings"中完成"划分程序集"和"补充元数据"的步骤。
-
打开场景"/Assets/Scenes/AOT/Scene_AOT_2.unity"。
-
打开"Build Settings",点击"Add Open Scenes"后,执行"Build"或"Build And Run"。
注意:若遇到gradle报错,请检查"compileSdkVersion"和"buildToolsVersion"版本。
BTW,网上很多教程,这里不再补充说明。
运行示例
UI使用的是AssetsStore中的"UI Samples"
进入首页:
加载数据:
程序启动时,若本地数据存在,则自动载入热更数据。点击"开始"按钮,进入热更数据中的入口场景。
参考《制作热更数据-AR图片识别场景》制作热更数据,在"场景导出"时设置入口场景。
下载数据:
前提:服务器已上传热更数据
参考《制作热更数据-AR图片识别场景》制作热更数据,并将数据上传至服务器。
点击"更新",会先校验数据版本,若服务器数据版本较新,则更新数据。
关键组件
DataDownLoader组件
方法:
- StartDownload:开始下载数据(内部调用CheckDataVersion方法)
检视面板:
DllLoader组件
这里采用的是HybridCLR,通过初始化从打包成assetbundle的scene还原挂载的热更新脚本的方式。HybridCLR 文档
主要方法:
- StartReadData:开始读取热更数据(包括热更程序集和AB包)
- getEntrance:获取热更数据的入口场景名称
检视面板:
热更数据管理
DataDownLoader和DllLoader分别实现了数据下载和数据加载。
现创建了一个脚本,统一管理热更数据。参考工程中的HotFixDataMgr.cs
- 给"开始"按钮添加点击事件,挂载
HotFixDataMgr
的StartGame()方法
public void StartGame()
{
if(m_Status != Status.READY)
{
AndroidUtils.Toast("数据加载中,请稍候...");
return;
}
//获取入口场景名称
string mainSceneName = dllLoader.getEntrance();
if (mainSceneName == null)
{
AndroidUtils.Toast("请先更新数据,点击"更新"");
return;
}
SceneManager.LoadSceneAsync(mainSceneName, LoadSceneMode.Single);
}
- 给"更新"按钮添加点击事件,挂载
HotFixDataMgr
的UpdateData()方法
public void UpdateData()
{
if (m_Status != Status.READY)
{
AndroidUtils.Toast("程序未就绪,请稍后再试!");
return;
}
...
if (dataDownLoader != null)
{
m_Status = Status.UPDATING;//开始更新,切换为更新状态
...
//开始下载数据
dataDownLoader.StartDownload();
}
}
-
在
HotFixDataMgr.cs
的Awake方法中添加委托事件private void Awake() { ... //数据处理失败时触发 dataDownLoader.OnError += HandleError; dllLoader.OnError += HandleError; //进度更新 dllLoader.OnProgressUpdate += HandleProgressFromDllLoader; dataDownLoader.OnProgressUpdate += HandleProgressFromDataDownLoader; ... } ... /// <summary> /// 处理错误 /// </summary> /// <param name="message"></param> private void HandleError(string message) { if (Application.platform == RuntimePlatform.Android) { AndroidUtils.Toast("数据版本校验失败"); } Debug.Log("数据版本校验失败"); m_Status = Status.READY; } private void HandleProgressFromDataDownLoader(float progress) { int pro = (int)(progress * 100); Debug.Log("数据同步进度: " + pro + " %"); } private void HandleProgressFromDllLoader(float progress) { int pro = (int)(progress * 100); Debug.Log("数据加载进度: " + pro + " %"); }