【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 + " %");
      }
    
相关推荐
我写代码菜如坤6 小时前
unity获取键盘按键
unity·计算机外设·游戏引擎
雪 狼12 小时前
unity 使用UnityWebRequest从服务器下载
服务器·unity·游戏引擎
u01040583615 小时前
使用Spring Boot构建RESTful API
spring boot·后端·restful
u01040583615 小时前
使用Java构建RESTful API的最佳实践
java·开发语言·restful
Unity打怪升级19 小时前
Unity入门之重要组件和API(3) : Transform
unity·c#·游戏引擎
Unity游戏开发1 天前
【Unity navigation面板】
unity·游戏引擎
程序员正茂1 天前
Unity游戏帧率查看软件Fraps
unity·帧率
Unity游戏开发1 天前
【Unity navmeshaggent 组件】
unity·游戏引擎
陈言必行2 天前
Unity 资源 之 Sweet Cakes Icon套装,110个高品质蛋糕图标分享
unity·游戏引擎
唐小墨同学2 天前
机械拆装-基于Unity-装配功能的实现
unity·游戏引擎