Skip to content
This repository was archived by the owner on Apr 24, 2025. It is now read-only.

eqgis/EQ-MR-For-Unity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

摘要 本文档详细介绍了我基于 HybridCLR 与 AR Foundation 的 Unity AR 开发插件,旨在为开发者提供高效的跨平台热更新方案。文章从背景与动机出发,覆盖一键安装工具、环境配置、热更新数据制作与示例程序运行等核心模块,并展示代码结构与使用指南。文末说明项目已归档不再维护,欢迎 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
  /Editor
    EnvInstaller_vX.X
  /HoloXR
    /Scripts
      DataDownLoader.cs
      DllLoader.cs
      HotFixDataMgr.cs
      DetectCallback.cs
    /Settings
      ARCoreSettings.asset
      HybridCLRSettings.asset
  /Scenes
    AOT/Scene_AOT_2.unity
    HotUpdate/Scene_Example.unity
  /Resources
    /HotUpdateData
/HybridCLRData
  AssembliesPostIl2CppStrip/{platform}
/BuildScripts
  build_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 并开发。

八、未来规划

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


结语

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

About

Unity平台的MR开发仓库

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages