【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.pswp.cn/diannao/80873.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80873.shtml
英文地址,請注明出處:http://en.pswp.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;便讓我們聚焦于農耕…