专栏
本专栏将介绍如何使用这个支持热更的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 + " %");
}