【Unity AR开发插件】五、运行示例程序

专栏

本专栏将介绍如何使用这个支持热更的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.RuntimeAOT程序集AR SDK核心程序集,已编译成dll并添加至项目中。
Assembly-CSharpAOT/热更都可Unity的默认全局程序集

打包程序

  1. 参考之前的文档,在“HybridCLR Settings”中完成“划分程序集”和“补充元数据”的步骤。

  2. 打开场景“/Assets/Scenes/AOT/Scene_AOT_2.unity”。

  3. 打开“Build Settings”,点击“Add Open Scenes”后,执行“Build”或“Build And Run”。

注意:若遇到gradle报错,请检查“compileSdkVersion”和“buildToolsVersion”版本。
BTW,网上很多教程,这里不再补充说明。

运行示例

UI使用的是AssetsStore中的“UI Samples

进入首页:
首页

加载数据:

程序启动时,若本地数据存在,则自动载入热更数据。点击“开始”按钮,进入热更数据中的入口场景。

参考《制作热更数据-AR图片识别场景》制作热更数据,在“场景导出”时设置入口场景。

下载数据:

前提:服务器已上传热更数据

参考《制作热更数据-AR图片识别场景》制作热更数据,并将数据上传至服务器。

点击“更新”,会先校验数据版本,若服务器数据版本较新,则更新数据。

关键组件

DataDownLoader组件

方法:

  • StartDownload:开始下载数据(内部调用CheckDataVersion方法)

检视面板:

DataDownLoader

DllLoader组件

这里采用的是HybridCLR,通过初始化从打包成assetbundle的scene还原挂载的热更新脚本的方式。HybridCLR 文档

主要方法:

  • StartReadData:开始读取热更数据(包括热更程序集和AB包)
  • getEntrance:获取热更数据的入口场景名称

检视面板:

DllLoader

热更数据管理

DataDownLoader和DllLoader分别实现了数据下载和数据加载。
现创建了一个脚本,统一管理热更数据。参考工程中的HotFixDataMgr.cs

  • 给“开始”按钮添加点击事件,挂载HotFixDataMgr的StartGame()方法

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()方法

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 + " %");
    }
  • 28
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EQ-雪梨蛋花汤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值