三、配置带HybridCLR的ARCore开发环境

预告

本专栏将介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用。

专栏: Unity开发AR系列

插件简介

通过热更技术实现动态地加载AR场景,简化了AR开发流程,让用户可更多地关注Unity场景内容的制作。

“EnvInstaller…”支持HybridCLR和ARCore的一键安装。

“AR SDK…”基于HybridCLR和ARFoundation实现,使热更技术贯穿AR开发的全流程。

包含热更数据制作与导出、热更数据上传与下载、热更数据的版本控制与数据加载

资源下载

百度网盘链接:链接 提取码:jaiw

文件目录

配置AR开发环境

在前面的《使用插件一键安装》已介绍如何使用插件导入ARFoundation(ARCore)和HybridCLR的相关Package,这里仅介绍必须修改的设置。

导入AR SDK

  1. 通过“Assets -> Import Package -> Custom Package…”的方式导入 “AR SDK_v1.0.1.x.unitypackage”。导入成功后,菜单栏出现“Holo-XR”栏目。

  2. 点击“Holo-XR > Settings”,打开设置窗口。

    • (必需)勾选“热更新”启用SDK中涉及HybridCLR的脚本。

    • (必需)勾选“ARCore”,启用ARFoundation。(此处由于通过EnvInstaller安装的是ARCore,因此这里选用ARCore。目前也支持启用其它平台,将在后续文档中讲述。)

    • (可选)勾选“调试模式”和“打印日志”(勾选后,使用“EqLog.log(…)”)

Settings修改

使用ARFoundation

  1. 导入 “AR Foundation”和“ARCore Extensions for AR Foundation ”。

建议使用《使用插件一键安装》介绍的插件一键导入 ARCore的所有依赖。
此外,也可参考官方文档《AR Foundation 使用入门》按照步骤逐步导入。

  1. 转到 File > Build Settings 以打开 Build Settings 窗口,点击 Player Settings,修改3处地方。
Player Settings > …
Other Settings > Rendering取消选中 Auto Graphics API。 如果 Vulkan 列在 Graphics APIs 下,请将其移除,因为 ARCore 尚不支持 Vulkan。
Other Settings > Minimum API Level这里要构建 AR 必备应用,请指定 Android 7.0 ‘Nougat’ (API Level 24) or higher
Other Settings > Scripting Backend选择 IL2CPP(而非 Mono),Level切换为 .NET Framework(而非**.Net Standard 2.x**)。(注意:Unity 2020及其以下版本,切换为.NET 4.x)

示意图如下:

Player Settings修改

Player Settings修改

  1. 转到 Edit > Project Settings 以打开 Project Settings 窗口,点击XR Plug-in Management,启用ARCore。
Settings修改
  1. 转到ARCore,修改为深度可选的AR必备应用。
Settings修改

配置HybridCLR

  1. 检查HybridCLR Installer的状态

通过菜单栏 > HybridCLR > Installer…,打开HybridCLR Installer窗口,检查Installed的状态值是否为True。若为False,则点击Install按钮。

  1. 转到 File > Build Settings 以打开 Build Settings 窗口,点击 Player Settings,修改如下内容。这是使用HybridCLR所必需的。

HybridCLR同样需要修改为IL2CPP和切换为 .Net 4.x(Unity 2019-2020) 或 .Net Framework(Unity 2021+),由于上节内容已修改,这里不再重复。

  • 关闭增量GC

此前"HybridCLR"仅商业版支持增量GC,现在社区版已在2023年8月28日支持增量GC。若不关闭增量GC,则需要替换HybridCLR4.0以上版本。

Player Settings修改

  • 关闭代码裁剪

若要启用代码裁剪,则需补充元数据(此处关闭代码裁剪,可避免很多方法找不到的异常问题。若不关闭,则需要针对缺失的内容补充元数据)。

Player Settings修改

  1. 划分程序集

请阅读文档配置程序集了解如何配置程序集。

划分程序集:
项目代码必须合理拆分为AOT(即编译到游戏主包内)程序集 和 热更新程序集,才能进行热更新。HybridCLR对于 怎么拆分程序集并无任何限制,甚至可以把第三方工程中的代码作为热更新程序集。一般来说,游戏刚启动时,至少需要一个AOT程序集来负责启动及热更新相关工作。

这里以AR SDK中的示例为例,AR SDK中包含如下程序集定义

程序集类型简介
Holo.Demo热更程序集包含各单项功能示例的程序集,示例Demo中使用
DynamicScene热更程序集AR动态场景示例的程序集,示例Demo中使用
Holo.RuntimeAOT程序集AR SDK核心程序集,已编译成dll并添加至项目中。
Assembly-CSharpAOT/热更都可Unity的默认全局程序集

Assembly-CSharp是Unity默认的程序集,这里可做AOT程序集,也可做热更程序集。

若要自定义热更数据集,则可通过“Assets > Create > Assembly Definition”的方式创建程序集。

  1. 配置热更新程序集

注意:如果把Assembly-CSharp作为AOT程序集,强烈建议关闭热更新程序集的auto reference选项。因为Assembly-CSharp是最顶层assembly,它会自动引用剩余所有assembly。

当确定要使用哪些程序集作为热更程序集后,那么需要在HybridCLR Settings中,将这些程序集添加至“hotUpdateAssemblyDefinitions”或“hotUpdateAssemblies”。

操作步骤

  • 点击菜单 “HybridCLR > Settings” 打开配置界面。
  • 将Assembly Definition(asmdef)方式定义的程序集,加入hotUpdateAssemblyDefinitions
  • 将普通dll或"Assembly-CSharp"加入hotUpdateAssemblies(不需要’.dll’后缀)

注意事项

  • hotUpdateAssemblyDefinitions和hotUpdateAssemblies列表是等价的,不要重复添加,否则会报错。
  • 如果热更新程序集是已经编译好的dll(无论放在Assets下还是其他目录),必须同时在 HybridCLR/Settings的外部dll搜索路径中配置它的搜索路径。 搜索路径为相对路径,相对于项目根目录(也就是Assets的父目录)。

参考示例

  • 这里将“Holo.Demo”和“DynamicScene”两个程序集作为热更的程序集,则可参考下面的操作截图。

Settings修改

  1. 生成AOT dll

    • 运行菜单 HybridCLR/Generate/All 一键执行必要的生成操作

    这里只需要执行"Genrate > All"即可,若需了解更多,请参考<<HybridCLR 打包工作流>>。

  2. 补充元数据

    在执行上一步操作后,生成的裁剪后的AOT dll可以用于补充元数据。HybridCLR插件会自动把它们复制到{project}/HybridCLRData/AssembliesPostIl2CppStrip/{target}

    注意,不同BuildTarget的裁剪AOT dll不可复用。

    打开“Assets/HybridCLRGenerate/AOTGenericReferences.cs”文件,查看需要补充的元数据。

    using System.Collections.Generic;
    public class AOTGenericReferences : UnityEngine.MonoBehaviour
    {// {{ AOT assembliespublic static readonly IReadOnlyList<string> PatchedAOTAssemblyList = new List<string>{"UnityEngine.AndroidJNIModule.dll","UnityEngine.CoreModule.dll","mscorlib.dll",};
    }
    

    可见,需要补充的dll有以下3个。

     "UnityEngine.AndroidJNIModule.dll","UnityEngine.CoreModule.dll","mscorlib.dll",
    

    打开HybridCLR Settings,在“Patch AOT Assemblies”中添加。

    补充元数据

注意:

补充元数据没有加载顺序的要求。这里使用的是HybridCLR社区版本,补充元数据加载后,大约会占用6倍dll大小的内存,而且这些内存无法回收。若对内存有较高的要求,需要使用HybridCLR商业版本的完全泛型共享技术,不再需要补充元数据,节省这部分内存。请转至 HybridCLR文档《基于补充元数据的泛型函数实例化技术》


至此环境已搭建完成,后续将结合示例讲述如何实现一个示例程序。


补充说明

AR Foundation注意事项

内置渲染管线和通用渲染管线都与 AR Foundation 软件包兼容,但 URP 需要额外的步骤进行配置。
参考文档《AR Foundation 使用入门》

HybridCLR技巧

  • 优化打包流程

    HybridCLR/Generate/All 命令运行过程中会执行一次导出工程,以生成裁剪后的AOT dll。这一步对于大型项目来说可能非常耗时,几乎将打包时间增加了一倍。如果需要优化打包时间,可以按照如下流程一次出包。

    • 运行 HybridCLR/Generate/LinkXml
    • 导出工程
    • 运行 HybridCLR/Generate/Il2cppDef
    • 运行 HybridCLR/Generate/MethodBridge生成桥接函数
    • 运行 HybridCLR/Generate/PReverseInvokeWrapper。 不需要与lua之类交互的项目可跳过此步。
    • {proj}\HybridCLRData\LocalIl2CppData-{platform}\il2cpp\libil2cpp\hybridclr\generated目录 替换导出工程中的此目录。
    • 在导出工程上执行build

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

代码覆盖率:度量软件质量的关键指标

一、引言 代码覆盖率是衡量软件测试质量的一个重要指标&#xff0c;它描述了测试用例覆盖了多少代码。高的代码覆盖率可以帮助我们增加对软件质量的信心&#xff0c;并发现潜在的问题。在本文中&#xff0c;我们将深入探讨代码覆盖率&#xff0c;并通过实例来演示如何计算和提…

多目标跟踪入门介绍

多目标跟踪算法 我们也可以称之为 Multi-Target-Tracking &#xff08;MTT&#xff09;。 那么多目标跟踪是什么&#xff1f; 不难看出&#xff0c;跟踪算法同时会为每个目标分配一个特定的 id 。 由此得出了目标跟踪与目标检测的区别&#xff08;似乎都是用方框来框出目标捏…

番外篇 | 利用PyQt5+YOLOv5来搭建目标检测系统(附可视化界面+功能介绍+源代码)

前言:Hello大家好,我是小哥谈。PyQt5是一个Python绑定的Qt库,是用于创建图形用户界面(GUI)和其他应用程序组件的工具包。PyQt5提供了许多GUI元素,如按钮、文本框、标签等,也提供了许多Qt的功能,如网络、数据库、XML等。通过PyQt5可以在Python中使用Qt的丰富功能和强大的工…

jenkins使用gitLab(极狐)认证登陆

jenkins安装 GitLab Authentication插件 我因为java版本和最新GitLab Authentication 1.19版本不兼容&#xff0c;选择了本地安装 找个历史版本1.13版本&#xff0c;然后下载到电脑上 - 本地上传插件并安装 在极狐上创建一个应用 - 配置应用信息 应用名&#xff1a;jenkinsLo…

OC foudation框架(下)的学习

OCfoudation框架&#xff08;下&#xff09; 前面学习了有关OCfoudation框架的部分内容&#xff0c;我们现在对于后面的内容继续学习。 文章目录 OCfoudation框架&#xff08;下&#xff09;数组&#xff08;NSArray和NSMutableArray&#xff09;对集合元素整体调用方法排序使用…

弱监督语义分割-对CAM的生成过程进行改进1

一、仿射变换图像结合正则项优化CAM生成 论文&#xff1a;Self-supervised Equivariant Attention Mechanism for Weakly Supervised Semantic Segmentation &#xff08;CVPR,2020&#xff09; 1.SEAM方法 孪生网络架构&#xff08;Siamese Network Architecture&#xff09…

【网络编程】UDP协议和TCP协议1

UDP协议格式 UDP 报文分为 UDP 报头和 UDP 数据区两部分。报头由 4 个 16 位长&#xff08;2字节&#xff09;字段组成&#xff0c;分别说明该报文的源端口、目的端口、报文长度和校验值。 UDP协议如何将报头和有效载荷分离 UDP报头是一种定长报头&#xff0c;长度为8个字节。…

kaldi学习参考

HMM模型 https://www.cnblogs.com/baixf-xyz/p/16777438.htmlhttps://www.cnblogs.com/baixf-xyz/p/16777438.htmlGMM-HMM 基于GMM-HMM的语音识别系统https://www.cnblogs.com/baixf-xyz/p/16777439.html https://www.cnblogs.com/baixf-xyz/p/16777426.htmlhttps://www.cnbl…

全网最详细使用war包的方式结合Tomcat和向量数据库PostgreSQL本地部署Xwiki教学

部署 XWiki 在 CentOS 7 上的过程涉及多个步骤&#xff0c;主要包括安装环境依赖、配置数据库以及安装和配置XWiki。以下是一个详细的步骤说明&#xff1a; 1. 系统准备 首先&#xff0c;确保您的系统是最新的&#xff1a; sudo yum update2. 安装 Java 这里需要注意一下版本…

【静态分析】软件分析课程实验A4-类层次结构分析与过程间常量传播

官网&#xff1a;作业 4&#xff1a;类层次结构分析与过程间常量传播 | Tai-e 参考&#xff1a;https://www.cnblogs.com/gonghr/p/17984124 ----------------------------------------------------------------------- 1 作业导览 为 Java 实现一个类层次结构分析&#xf…

又被System.out.print给坑了一把

学过java的同学都应该知道&#xff0c;第一个程序很多人都是这样&#xff1a; public class Hello {public static void main(String[] args) { System.out.print("Hello,world&#xff01;");} } 打印结果是&#xff1a;Hello,world&#xff01; 接着可能会…

中国地面基本气象逐小时数据获取方式

环境气象数据服务平台提供了全国大约2100个点位&#xff0c;2023年1月1日至今的小时级数据。包括气温、气压、湿度、风、降水等要素。 数据基于ECMWF ERA5-Land Hourly陆面再分析资料和中国地面基本气象观测逐三小时数据&#xff0c;使用机器学习模型加工所得&#xff0c;对比…

记一次DNS故障导致用户无法充值的问题(下)

上一篇说到DNS故障导致无法充值&#xff0c;后来我们通过拨测发现业务域名的解析目标地址被解析到了【127.0.0.1】IP。 1、联系阿里云厂商&#xff0c;通过沟通&#xff0c;阿里云反馈我们的域名被XX省通管单位封禁了&#xff0c;导致解析到了不正确的地址。 2、为了解决用户问…

ADS基础教程11 - TouchStone文件的导出及导入

目录 一、 T o u c h S t o n e 介绍 \color{#4285f4}{ \mathbf{ 一、TouchStone介绍}} 一、TouchStone介绍 二、文件导出、导入方式 \color{#4285f4}{ \mathbf{ 二、文件导出、导入方式}} 二、文件导出、导入方式1.原理图操作1&#xff09;原理图中导出2.原理图中导入 3.DDW中…

云服务器性能大揭秘:4核与8核你知道多少?

​  云计算服务中&#xff0c;通常使用具有多个 CPU 的服务器集群&#xff0c;以便为企业和个人等提供可扩展的计算资源。这使他们能够处理大量数据处理和存储&#xff0c;而无需自己投资昂贵的硬件。像术语“4核”和“8核”&#xff0c;在云服务器领域中就比较常见&#xff…

中国地面气候资料日值数据获取方式

数据简介 环境气象数据服务平台提供了全国大约2100个点位&#xff0c;2000年至2023年的逐日数据。包括气温、气压、湿度、风、降水等要素。 数据基于ECMWF reanalysis-era5-land、reanalysis-era5-single-levels 以及中国2100站点地面气候资料日值观测数据&#xff0c;使用机器…

winform植物大战僵尸

winform植物大战僵尸 植物大战僵尸源码 半成品 需要的拿去学习 登陆注册选择关卡 向日葵 豌豆射手 双枪豌豆射手 项目获取&#xff1a; 项目获取&#xff1a;typora: typora/img (gitee.com) 备用项目获取链接1&#xff1a;yifeiyixiang/kamo: 源码下载 (github.com) 备用…

Capl复合数据类型:枚举

用于定义一组有穷的、命名的常量。常量有了命名更容易理解和记忆&#xff0c;枚举中常量的命名&#xff0c;必须在整个capl程序中唯一。 定义的枚举类型变量&#xff0c;里面的成员如果没有赋值&#xff0c;默认从左到右&#xff0c;依次为012345...。如果有赋值就该成员就代表…

【全开源】Java外卖霸王餐免费吃外卖小程序+APP+公众号+H5多端霸王餐源码

一、特色功能 霸王餐活动管理&#xff1a;允许商家发布和管理霸王餐活动&#xff0c;包括设置活动时间、具体优惠、活动规则等。用户参与与浏览&#xff1a;用户可以在小程序中浏览霸王餐活动列表&#xff0c;查看活动的详情信息&#xff0c;如商品或服务的免费赠送、活动规则…