三、配置带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://www.rhkb.cn/news/323683.html

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

相关文章

新能源汽车中HEV与PHEV分别代表什么车型,它们与传统燃油车都有什么区别?

前言 新能源汽车正逐渐成为全球汽车工业的主流方向&#xff0c;而HEV&#xff08;Hybrid Electric Vehicle&#xff09;和PHEV&#xff08;Plug-in Hybrid Electric Vehicle&#xff09;这两种混合动力车型在这一转型过程中扮演着重要角色。下面我们详细探讨HEV与PHEV的定义&a…

Pandas数据取值与选择

文章目录 第1关&#xff1a;Series数据选择第2关&#xff1a;DataFrame数据选择方法 第1关&#xff1a;Series数据选择 编程要求 本关的编程任务是补全右侧上部代码编辑区内的相应代码&#xff0c;要求实现如下功能&#xff1a; 添加一行数据&#xff0c;时间戳2019-01-29值为…

TC3xx MTU概述(2)

目录 1.概述 2.如何配置NDT 3.小结 1.概述 上篇TC3xx MTU概述(1)-CSDN博客我们讲解了MTU基本功能和MBIST基本概念&#xff0c;接下来我们继续讲解MTU如何配置NDT算法。 2.如何配置NDT 前面聊了那么多概念&#xff0c;我们还是来看看如何配置MTU来实现NDT。 MTU寄存器分为…

WireShark对tcp通信数据的抓包

一、抓包准备工作 安装wireshark sudo apt update sudo apt install wireshark 运行 二、WireShark工具面板分析 上图中所显示的信息从上到下分布在 3 个面板中&#xff0c;每个面板包含的信息含义如下&#xff1a; Packet List 面板&#xff1a;显示 Wireshark 捕获到的所…

window golang 升级版本

执行go tidy&#xff0c;发现执行不了&#xff0c;得升级一下版本了 进入官网&#xff0c;并选择合适的系统以及版本。https://go.dev/dl/ 这台电脑是windows&#xff0c;我本人比较喜欢下载zip自己解压。 解压&#xff0c;这里我选择直接覆盖原文件&#xff0c;需要保留原版…

Vue3自定义封装音频播放组件(带拖拽进度条)

Vue3自定义封装音频播放组件&#xff08;带拖拽进度条&#xff09; 描述 该款自定义组件可作为音频、视频播放的进度条&#xff0c;用于控制音频、视频的播放进度、暂停开始、拖拽进度条拓展性极高。 实现效果 具体效果可以根据自定义内容进行位置调整 项目需求 有播放暂停…

Pycharm 执行pytest时,会遇见某些case Empty suite

我这边的情况是有些case就是执行不了&#xff0c;百度了很多&#xff0c;有说设置选pytest的&#xff0c;有命名规范的&#xff0c;都没有成功。后面问了同事之后才发现&#xff0c;pytest 的框架&#xff0c;pytest.ini 执行的时候&#xff0c;加了个标签&#xff0c;主动把某…

天府锋巢直播产业基地构建成都电商直播高地

天府锋巢直播产业基地自成立以来&#xff0c;一直秉承着创新、协同、共赢的发展理念&#xff0c;吸引了众多直播企业纷纷入驻。随着直播产业的迅猛发展&#xff0c;改成都直播基地内的配套服务也显得尤为重要。本文将深入探讨入驻天府锋巢直播产业基地后&#xff0c;配套的直播…

【笔试训练】day23

一、打怪 思路 由于是先手攻击&#xff0c;如果一次攻击就能杀死小怪&#xff0c;那么说明可以为无限杀小怪。 再计算杀一只小怪要扣多少血就好了&#xff0c;再用总生命值去除这个扣血量&#xff0c;得到的就是最多杀死小怪的数量。注意&#xff0c;由于最后一定要活下来&am…

【Linux系统】进程控制

再次理解进程 进程&#xff1a;内核的相关管理数据结构(task_struct(进程控制块PCB)&#xff0c;mm_struct(地址空间)&#xff0c;页表) 代码和数据 那么如何理解进程具有独立性&#xff1f; 我们之前已经学习过进程控制块啊&#xff0c;地址空间啊&#xff0c;页表啊&…

爆爽,英语小白怒刷 50 课!像玩游戏一样学习英语~

重点!!!(先看这) 清楚自己学英语的目的, 先搞清楚目标&#xff0c;再行动自身现在最需要的东西&#xff1a;词汇量&#xff1f;口语&#xff1f;还是阅读能力&#xff1f;找对应的书籍,学习资料往兴趣靠拢&#xff1a;网上有大量的推荐美剧学习、小说学习&#xff0c;不要被他…

数据库调优-连接池优化

先贴下连接池的相关配置&#xff1a; 连接池参数配置&#xff1a; 字段含义Max Number of Connections最大连接数&#xff1b;做性能测试时&#xff0c;可以填 0 。在开发的项目中按实际代码填写&#xff0c;默认是 20 。Max Wait(ms)在连接池中取回连接最大等待时间&#xf…

Optional学习记录

Optional出现的意义 在Java中&#xff0c;我们经常遇到的一种异常情况&#xff1a;空指针异常&#xff0c;在原本的编程中&#xff0c;为了避免这种异常&#xff0c;我们通常会向对象进行判断&#xff0c;然而&#xff0c;过多的判断语句会让我们的代码显得臃肿不堪。 所以在J…

ETL工具kettle(PDI)入门教程,Transform,Mysql->Mysql,Csv->Excel

什么是kettle&#xff0c;kettle的下载&#xff0c;安装和配置&#xff1a;ETL免费工具kettle(PDI)&#xff0c;安装和配置-CSDN博客 mysql安装配置&#xff1a;Linux Centos8 Mysql8.3.0安装_linux安装mysql8.3-CSDN博客 1 mysql -> mysql 1.1 mysql CREATE TABLE user_…

《黑暗之魂》系列迎来打折:魂三标准版半价134,豪华版199

《黑暗之魂》系列游戏降价促销&#xff0c;现在是购买的好时机&#xff01;想必喜欢挑战和探索的玩家们对这个消息会特别感兴趣。让我们来看看具体的折扣信息吧&#xff01; 首先是《黑暗之魂&#xff1a;重制版》&#xff0c;原价198元&#xff0c;现价仅为99元&#xff01;这…

DSP开发实战教程-国产DSP替代进口TI DSP的使用技巧

1.替换CCS安装路径下的Flash.out文件 找到各自CCS的安装路径&#xff1a; D:\ti\ccs1230\ccs\ccs_base\c2000\flashAlgorithms 复制进芯电子国产DSP官网提供的配置文件 下载链接&#xff1a;https://mp.csdn.net/mp_download/manage/download/UpDetailed 2.替换原有文件 3.…

密码学《图解密码技术》 记录学习 第十三章

目录 第十三章 13.1 本章学习的内容 13.2 PGP 简介 13.2.1 什么是 PGP 13.2.2 关于 OpenPGP 13.2.3关于GNU Privacy Guard 13.2.4 PGP 的功能 公钥密码 数字签名 单向散列函数 证书 压缩 文本数据 大文件的拆分和拼合 13.3 生成密钥对 13.4 加密与解密 13.4.1 加密 生成…

电脑显示丢失mfc140u.dll怎么修复,总共有7个方法

mfc140u.dll 是一个动态链接库&#xff08;Dynamic Link Library&#xff09;文件&#xff0c;它是Microsoft Foundation Class (MFC)库的一部分&#xff0c;专为使用C编程语言开发Windows应用程序而设计。MFC库由微软提供&#xff0c;作为一个高级的应用程序框架&#xff0c;旨…

数据分析——业务指标量化

业务指标量化 前言一、统计指标二、统计指标特点完整的统计指标统计指标的理解和使用方法 三、统计指标类型总量指标时期指标时点指标总量指标的作用 相对指标计划完成相对数指标结构相对数指标比例相对数指标比较相对数指标动态相对数指标 平均指标 四、数量指标和质量指标五、…

【JVM】从硬件层面和应用层面的有序性和可见性,到Java的volatile和synchronized

Java的关键字volatile保证了有序性和可见性&#xff0c;这里我试着从底层开始讲一下有序性和可见性。 一&#xff0c;一致性 数据如果同时被两个cpu读取了&#xff0c;如何保证数据的一致性&#xff1f;或者换句话说&#xff0c;cpu1改了数据&#xff0c;cpu2的数据就成了无效…