【Unity AR开发插件】一、高效热更新:Unity AR 插件结合 HybridCLR 与 ARFoundation 的开源仓库分享

在这里插入图片描述

摘要
本篇博客详细介绍了我基于 HybridCLR 与 AR Foundation 的 Unity AR 开发插件,旨在为开发者提供高效的跨平台热更新方案。文章从背景与动机出发,覆盖一键安装工具、环境配置、热更新数据制作与示例程序运行等核心模块,并展示代码结构与使用指南。文末说明项目已归档不再维护,欢迎 Fork 与二次开发。


仓库地址:EQ-MR-For-Unity
https://github.com/eqgis/EQ-MR-For-Unity


本项目于 2024 年 5 月完成最后一次维护,为稳定归档版本,不再接受更新或修复。如需新功能或定制化需求,请自行 Fork 并开发。

引言

在增强现实(AR)技术快速发展的大背景下,Unity 已成为移动端 AR 应用的首选引擎。然而,随着项目规模扩大与功能复杂度提升,传统的“全量构建+发布”流程已难以满足快速迭代与热修复需求:每次更改都需要长时间的 AOT 编译与打包,影响开发效率。为此,我基于 HybridCLR 和 AR Foundation,打造了一款支持热更新的 Unity AR 开发插件(以下简称“本插件”),让 AR 场景内容与逻辑的更新更轻量、更灵活。


一、插件背景与动机

  1. 提升迭代效率
    Unity 在 IL2CPP 模式下的 AOT 编译与打包环节耗时惊人,尤其是大型项目常需数分钟至十几分钟。通过 HybridCLR,我们可将游戏核心逻辑与示例功能打包为可热更新的 Assembly,只在需要时更新对应 DLL,极大缩短迭代周期。

  2. 跨平台一致性
    HybridCLR 扩展了 IL2CPP,使其从纯 AOT Runtime 转变为 AOT + Interpreter 混合模式,原生支持动态加载 Assembly。它在 iOS、Android 及其他平台(如主机)上都能以 AOT+Interpreter 模式高效执行,为跨平台 AR 应用热更新提供统一方案。

  3. 内容驱动开发
    AR 应用核心在于场景与资源内容的丰富与优化。本插件将 AR 场景、模型及逻辑统一封装为可热更新资源,允许动态下发与版本管理,缩减客户端包体积,提升用户体验。


二、功能概览

  • 一键安装工具:集成 EnvInstaller,一键导入 AR Foundation、ARCore Extension、HybridCLR 相关 Package;
  • 开发环境配置:通过插件设置与 Unity Project/Player Settings 快速完成 ARCore 与 HybridCLR 所需配置;
  • 热更新数据制作:提供 “BuildBundle-Android” 导出流程,将 AR 场景打包为热更新数据(ZIP + version 文件);
  • 示例程序运行:包含 AR 图片识别场景示例与动态场景示例,展示如何加载热更新数据并进入入口场景;
  • 动态加载逻辑:核心组件 DataDownLoader、DllLoader 与 HotFixDataMgr,分别负责数据下载、DLL 加载与入口场景切换;
  • 灵活扩展接口:Expose DetectCallback 等回调机制,可自定义图片识别、场景交互与资源加载逻辑;
  • 归档开源:当前版本为稳定归档版,不再维护,欢迎社区 Fork 与二次开发。

三、技术架构与核心模块

3.1 一键安装环境

  • EnvInstaller 插件:在导入后新增 “Installer” 菜单,提供 “Install ARCore” 与 “Install HybridCLR” 两个选项,自动添加所需 Package 与依赖。
  • ARCore(XR Foundation):EnvInstaller 会导入 AR Foundation 与 ARCore Extensions,简化手动导入流程。
  • HybridCLR:EnvInstaller 包含 HybridCLR package,执行两步 “Install” 操作后,自动替换 libil2cpp 并启用混合运行时。

3.2 开发环境配置

  1. 导入 AR SDK
    通过 Assets -> Import Package -> Custom Package… 导入 AR SDK_v1.0.1.x.unitypackage,激活菜单 “Holo-XR > Settings”,勾选“热更新”和“ARCore”。

  2. Project/Player Settings 调整

    • Graphics API:取消 Auto Graphics API,移除 Vulkan;
    • Minimum API Level:设为 Android 7.0 (API Level 24) 或以上;
    • Scripting Backend:选择 IL2CPP,API Level 切换为 .NET Framework(Unity 2021+)或 .NET 4.x(Unity ≤2020)。
  3. XR Plug-in Management
    在 Project Settings > XR Plug-in Management 中启用 ARCore,并在 ARCore 菜单设置深度可选。

  4. HybridCLR Settings

    • 打开菜单 HybridCLR > Installer…,确保 Installed 状态为 True;
    • HybridCLR > Settings 中,将示例程序集(Holo.Demo、DynamicScene)添加到 hotUpdateAssemblieshotUpdateAssemblyDefinitions
    • 配置 “Patch AOT Assemblies”,添加需要补充元数据的 DLL 列表(UnityEngine.AndroidJNIModule.dll、UnityEngine.CoreModule.dll、mscorlib.dll)。

3.3 热更新数据制作

  1. 场景配置

    • ARCore Session 对象上添加 ARCoreImageDetect 组件,配置待识别的图像集合及对应 Prefab;
    • 自定义继承 DetectCallback,重写 OnAddedOnUpdateOnRemoved 回调,实现识别事件逻辑。
  2. 导出热更数据
    在菜单 Holo-XR -> BuildBundle-Android 中,选择入口场景,点击“导出”,生成 ZIP 包与 version 文件,作为热更数据。

3.4 示例程序运行

  1. 程序集划分
    HybridCLR Settings 中完成示例程序集划分与元数据补充。
  2. 场景与打包
    打开示例场景 /Assets/Scenes/AOT/Scene_AOT_2.unity,在 Build Settings 中添加场景并运行 Build or Build And Run。
  3. 关键组件
    • DataDownLoader:负责版本校验与热更数据下载,提供 StartDownload() 方法、OnProgressUpdateOnError 回调;
    • DllLoader:读取热更 Assembly 与 AB包,提供 StartReadData()getEntrance() 方法;
    • HotFixDataMgr:管理下载与加载流程,提供 StartGame()UpdateData(),并在 Awake() 中注册错误与进度事件。

四、代码结构与仓库布局

/Assets/EditorEnvInstaller_vX.X/HoloXR/ScriptsDataDownLoader.csDllLoader.csHotFixDataMgr.csDetectCallback.cs/SettingsARCoreSettings.assetHybridCLRSettings.asset/ScenesAOT/Scene_AOT_2.unityHotUpdate/Scene_Example.unity/Resources/HotUpdateData
/HybridCLRDataAssembliesPostIl2CppStrip/{platform}
/BuildScriptsbuild_android.bat
LICENSE.md
README.md
  • Assets/HoloXR:核心脚本与资源;
  • Assets/Editor/EnvInstaller:EnvInstaller 插件源代码;
  • BuildScripts:一键打包脚本,可调整 SDK 版本与输出路径;
  • HybridCLRData:AOT 裁剪后 DLL 与元数据文件;
  • README.md:项目介绍、快速开始与使用指南;
  • LICENSE.md:MIT 开源协议。

五、使用指南

  1. Clone 仓库:
    git clone https://github.com/YourRepo/Unity-AR-Plugin-Archived.git
    
  2. 打开 Unity 项目,执行 Assets -> Import Package -> Custom Package… 导入 EnvInstaller 与 AR SDK;
  3. Holo-XR > Settings 中启用热更新与 ARCore;
  4. 调整 Project/Player Settings 后,点击 Installer -> Install ARCoreInstaller -> Install HybridCLR
  5. 导入 AR SDK Package,并在 Holo-XR -> BuildBundle-Android 导出示例热更数据;
  6. 在示例场景中运行,或在自定义场景下调用 HotFixDataMgr 的方法加载热更内容。

六、贡献与二次开发

本仓库已“归档”且不再维护,欢迎社区 Fork 后:

  • 修复 Issue;
  • 优化打包与生成流程;
  • 支持更多 AR 平台(ARKit、Magic Leap 等);
  • 集成其他热更新方案(如 ILRuntime)。

请参考 CONTRIBUTING.md 提交 PR,并在 Issue 中描述具体需求或改进建议。


七、归档说明

仓库地址:EQ-MR-For-Unity
本项目于 2024 年 5 月完成最后一次维护,为稳定归档版本,不再接受更新或修复。如需新功能或定制化需求,请自行 Fork 并开发。


v1.0.2 Latest
Runtime:
-接入ARCore,新增功能如下:
1、支持通过图像识别实现新载入场景进行重定位

Editor:
1、新增Installer部分(用于预先安装依赖项)

其它:
1、更新与Android 原生交互部分所依赖的aar
2、完善程序集版本定义


May 9, 2024
v1.0.1
Runtime:
-接入ARCore,新增功能如下:
1、接入ARFoudation中所有功能
1、支持在热更程序集中使用AR增强图像的功能
2、支持使用ARCore采集点云数据
3、支持“通过图片识别的方式动态加载场景”的功能
-更新AndroidPlugin下aar

Editor:
1、支持一键导入ARFoundation
1、支持导入"*.pts"格式的点云数据
2、完善热更数据打包工具

Demo:
1、新增“AR动态场景”的示例
2、新增“点云采集”的示例

BUG:
1、解决热更数据重复加载的报错
2、解决使用Editor导出场景时偶尔报错的问题


v0.1.2
Sep 14, 2023
通用功能:
1、支持语音唤醒、语音识别、语音合成
2、提供语音助手(“VoiceAssistant”)
3、支持调用Eqgis的后台语音服务(参考“VoiceAssistantService”)

Unity编辑器:
1、支持在层级菜单中添加语音助手(“VoiceAssistant”)

示例:
1、语音服务调用示例(Holo/Demo/Speech/语音服务.unity)
2、思必驰语音助手使用示例(Holo/Demo/Speech/AiSpeech.unity)

备注:当前版本需要使用speech-plugin-1.0.6.aar


v0.1.1
Aug 24, 2023
MR平台:
-接入XVisio 设备,新增功能如下:
1、支持CSlamMapLoader加载在线homap数据

通用功能:
1、支持自动校验本地数据版本与服务器数据版本
2、支持根据服务器地址自动进行数据热更
3、数据热更时添加进度监听事件

Unity编辑器:
1、支持“*.homap”数据通过网络路径导入
2、支持对生成的热更数据进行加密

示例:
1、新增XVisio设备的热更示例


v0.1.0
Aug 15, 2023
MR平台:
-接入XVisio 设备,新增功能如下:
1、引入AprilTag识别
2、支持场景扫描,并将扫描结果保存为“*.homap”
3、支持根据“ *.homap”恢复场景
4、支持MR场景与MR场景之间的跳转

Unity编辑器:
1、新增Xvisio平台默认配置导入
2、支持“*.homap”数据从本地文件路径导入
3、支持安卓平台的场景资源以及C#脚本打包

资源内容:
1、引入用于实现遮挡的材质文件


八、未来规划

提示:本仓库已停止维护,后续不会有更新。建议有意向的开发者参考或二次开发,贡献社区力量。


结语

本插件旨在为 Unity AR 开发者提供一站式热更新解决方案,结合 HybridCLR 与 AR Foundation,实现跨平台、快速迭代的 AR 应用交付。虽然项目已归档,但其设计思路与核心模块对类似需求或许有借鉴意义。期待社区同学发扬开源精神,在此基础上持续创新,推动XR技术的发展!

BTW,
分享一下另一个开源仓库Sceneform-EQR
Sceneform-EQR 是对谷歌“sceneform-android-sdk”的扩展,适用于图形和视频,以及增强现实(AR)和虚拟现实(VR)相关领域。目前集成了 ARCore、AREngine 和 ORB-SLAM3,提供多种场景选项,包括 AR 场景、VR 场景和自定义背景场景,以满足不同的原生三维开发需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/80873.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据分析(四):Python Pandas数据输入输出全流程指南

Python Pandas数据输入输出全流程指南 1. 引言 数据输入输出(I/O)是数据分析工作流中最基础也是最重要的环节之一。Pandas提供了丰富的数据读写接口,支持从各种文件格式和数据库中加载数据,以及将处理后的数据保存到不同存储系统中。本文将全面介绍Pan…

人工智能与机器学习:Python从零实现性回归模型

🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创AI未来! 🚀 前言 在 AI 的热潮中,很容易忽视那些让它得以实现的基础数学和技…

Ubuntu18.04更改时区(图文详解)

Ubuntu18.04更改时区 1、前言2、更改时区3、总结 1、前言 记录一下Ubuntu18.04更改时区的过程,方便自己日后回顾,也可以给有需要的人提供帮助。 2、更改时区 输入下面的指令,进行时区选择 tzselect输入4选择亚洲,输入9选择中…

vue2 项目使用vite2 升级 vite4 后,对别名的解析有问题,导致打包后项目无法正常运行

问题描述: 之前使用的 vite2 版本,需要在 vite.config 里配置 vue 别名,不然会有commonjs 的依赖包找不到 vue,因为 vite 默认使用 esm 版本。 vue: vue/dist/vue.common.prod.js 在 vite2 中可以正常进行打包上线,…

民办生从零学C的第十二天:指针(1)

每日励志:拼搏十年,征战沙场,不忘初心,努力成为一个浑身充满铜臭味的有钱人。 一.内存和地址 1.内存 计算机内存是一系列存储单元的集合,每个存储单元都有唯一的地址来标识。这些存储单元用于存储程序的数据和指令。…

用Postman验证IAM Token的实际操作

当我们需要用Postman发送一个最简单的请求去验证Token的时候我们该怎么办? 【一、步骤】 步骤1:打开Postman,新建一个GET请求 请求地址填: https://iam.cn-north-4.myhuaweicloud.com/v3/auth/projects 解释一下:…

关于常量指针和指向常量的指针

关于指针,对于常量指针和指向常量的指针也是傻傻分不清。看到定义时,不知道是指针不能变,还是指针指向的内容不能变量。 先看形式: const char * A; char * const B; 这两种有什么区别?傻傻分不清。 A这种定义&am…

unity 读取csv

1.读取代码 string filePath Application.streamingAssetsPath "\\data.csv"; public List<MovieData> movieData new List<MovieData>(); private void ReadCSV(string filePath) { List<List<string>> data new List<…

安达发|高效智能塑料切割数控系统 - 全自动化软件解决方案

在当今的制造业中&#xff0c;塑料作为一种轻便、耐用且成本效益高的材料&#xff0c;被广泛应用于各个领域。随着科技的进步和市场需求的变化&#xff0c;塑料加工行业正面临着前所未有的挑战和机遇。为了提高生产效率&#xff0c;降低成本&#xff0c;并满足日益严格的质量标…

c#接口_抽象类_多态学习

c#接口_抽象类_多态学习 学习日志 关于&#xff1a;c#接口_抽象类_多态的学习记录。 一、概念 1. 多态&#xff08;Polymorphism&#xff09; 定义&#xff1a;同一操作作用于不同对象时&#xff0c;表现出不同的行为。实现方式&#xff1a; 继承 方法重写&#xff08;ov…

智能硬件行业售后服务管理:提升客户体验的关键所在

在当今数字化浪潮的推动下&#xff0c;智能硬件行业正以前所未有的速度蓬勃发展。从智能家居设备的普及&#xff0c;到智能穿戴产品的多样化&#xff0c;再到智能办公设备的广泛应用&#xff0c;智能硬件已经深入到我们生活的方方面面。据市场研究机构预测&#xff0c;未来几年…

Vue3 里 CSS 深度作用选择器 :deep()

&#x1f3af; 解释 在 Vue 组件里&#xff0c;CSS 默认是 scoped&#xff08;作用域限定的&#xff09;&#xff0c;只对当前组件生效。 如果你想在 scoped 样式里&#xff0c;穿透到子组件的内部元素&#xff0c;就要用 :deep()。 ✏️ 示例 比如&#xff0c;你有一个子组件…

仙宫云ComfyUI —【Wan2.1】AI视频生成部署

【Wan2.1】AI视频生成本地部署与使用技巧全面详解_哔哩哔哩_bilibili 所有模型下载&#xff1a;https://pan.quark.cn/s/9d793aa1b258 Runninghub本期课程工作流下载&#xff08;可获得1000RH币&#xff09;&#xff1a;https://www.runninghub.cn/?utm_sourcekol01-RH145 仙…

LabVIEW 在测控领域的深度开发与未来发展趋势研究报告 (2025-2030)(原创作品使用请注明出处,三连)

## LabVIEW 在测控领域的深度开发与未来发展趋势研究报告 (2025-2030) ### 引言 LabVIEW(Laboratory Virtual Instrument Engineering Workbench)自 1986 年由美国国家仪器公司(NI)发布以来,凭借其独特的图形化编程语言(G 语言)和强大的硬件集成能力,已成为全球工程师和…

政策支持与市场驱动:充电桩可持续发展的双轮引擎

随着全球能源转型加速&#xff0c;新能源汽车成为实现低碳交通的重要方向。然而&#xff0c;充电基础设施不足仍是制约其普及的关键瓶颈。当前&#xff0c;国际主流的充电桩运营模式包括政府推动、电网企业推动及汽车厂商推动三种模式&#xff0c;但单一模式均存在显著局限性。…

JVM——垃圾收集策略

GC的基本问题 什么是GC&#xff1f; GC 是 garbage collection 的缩写&#xff0c;意思是垃圾回收——把内存&#xff08;特别是堆内存&#xff09;中不再使用的空间释放掉&#xff1b;清理不再使用的对象。 为什么要GC&#xff1f; 堆内存是各个线程共享的空间&#xff0c…

用Java模拟打字:深入解析 java.awt.Robot 的键盘控制艺术

作为开发者&#xff0c;我们有时会遇到需要自动化用户界面交互的场景&#xff0c;比如自动化测试、脚本编写、或者制作一些辅助工具。而模拟键盘输入&#xff0c;尤其是“打字”&#xff0c;是这类自动化任务中非常基础且常见的一环。 在 Java 中&#xff0c;实现这一目标的利…

JavaScript 入门全讲解

JavaScript 入门全讲解 一、前言&#xff1a;为什么学习 JavaScript&#xff1f;二、JavaScript 简史与发展三、JavaScript 基础语法3.1 变量声明&#xff1a;var、let、const3.2 数据类型3.3 类型判断3.4 类型转换 四、运算符与表达式五、流程控制5.1 条件判断5.2 switch 语句…

python练习:求数字的阶乘

求数字的阶乘 eg:5的阶乘 54321 """ 求数字的阶乘 eg:5的阶乘 5*4*3*2*1 """count 1 for i in range(1,6):count count * iprint(count)运行结果&#xff1a;

传统农耕展陈如何突破?数字多媒体能否重构文化体验边界?

农耕文化是中华民族悠久历史的重要组成部分&#xff0c;它不仅承载着古代先民与自然和谐相处的智慧&#xff0c;也体现了人们对土地和自然的深厚情感。而今&#xff0c;如何有效地传承和展示这一传统文化&#xff0c;成为了一个重要的课题。今日&#xff0c;便让我们聚焦于农耕…