【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.Runtime AOT程序集 AR SDK核心程序集,已编译成dll并添加至项目中。
Assembly-CSharp AOT/热更都可 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方法)

检视面板:

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 + " %");
      }
相关推荐
Mxsoft6199 分钟前
AR远程定位偏差救场!某次现场故障,SLAM算法精准对齐设备模型!
算法·ar
世洋Blog5 小时前
SiYangUnityEventSystem,一个Unity中的事件系统
观察者模式·unity·c#·游戏引擎·事件系统
呆呆敲代码的小Y5 小时前
【Unity实战篇】| 游戏滑动框添加特殊效果,如实时高亮显示、曲线滑动等
游戏·unity·游戏引擎·实战·u3d·免费游戏·unity实战技巧
柯南二号5 小时前
【后端】【Java】RESTful书面应该如何写
java·开发语言·restful
Tatalaluola6 小时前
【Quest开发】用unity UI快速实现交互
unity·游戏引擎
柯南二号6 小时前
【后端】【Java】一文详解Spring Boot RESTful 接口统一返回与异常处理实践
java·spring boot·状态模式·restful
码界奇点6 小时前
Unity WebGL输入支持终极指南解决浏览器输入难题的完整方案
unity·容器·游戏引擎·鸿蒙系统·webgl
柯南二号7 小时前
【后端】【Java】一文深入理解 Spring Boot RESTful 风格接口开发
java·spring boot·restful
ar01237 小时前
AR远程指导:工业行业的新型生产力引擎
人工智能·ar
90后小陈老师7 小时前
Unity动画控制
unity·游戏引擎