开发平台:Unity 2020 版本以上
编程平台:Visual Studio 2022
面向平台:IOS 设备

一、本文聚焦问题点


  • 使用哪种 API 完成相机权限的获取
  • 如何进行画面跟踪对象的捕获。

  对深入了解AR的开发者尤为重要。但只是从应用目的上,只需要调用 “哪些API” 去实现AR扫图、扫物出像。所以本文的主要目的是围绕扫描出图的准备记录与应用案例进行记录与说明。

二、理解:AR Foundation 的扫描流程



  即便 AR Foundation 为我们已经准备好了可立刻投入至生产活动的预制体内容。从仅需要完成扫描一次出现图像的角度上,原配的预制体足以完成该过程。但仍然需要我们去完成一些 扫描 逻辑的处理工作。

三、准备工作:部署 AR 运行环境


3.1 相机关联管理:AR Session

  AR Session 是 AR Foundation 提供针对设备自主获取相机权限、配置画面刷新等内容的预制体对象。该对象在单个场景中要求仅唯一存在。复数存在的 AR Session 仅生效第一个。故在多场景应用 AR Session 被建议在第一个场景内创建,并使用 DontDestroyOnLoad(this.gameObject.root) 方法保留该对象。下面是该 AR Session 的具体描述:

描述 全局唯一的组件,用于管理AR相机画面与生命周期。
创建 工程场景内容,右键 ”XR -》AR Session“ 完成创建。
作用 提供 “相机权限获取” 的功能 + 管理 AR 画面刷新机制。

主要 API(在开发中,使用频率较高的几类):

  • stateChanged:监听设备状态。(唯一性)
    作用:检测当前设备是否支持 XR 功能。因为对于部分 Android 设备,并不支持AR应用的运行。
    注意:可用于持续监测状态,基于不同状态给予用户提示设备 不可运行、缺少支持的组件 等信息。
  • notTrackingReason:未跟踪缘由信息。
    作用:反馈图像跟踪过程中出现丢失的具体原因。
  • Reset():重设 AR Session。
    注意:每次重设,将销毁现有在跟踪信息对象,并恢复设备追踪参数至默认配置状态。
  • CheckAvailability():检查设备是否支持XR的状态。
  • Install():似乎是AR服务项,具体英文描述文档如下所示:该方法必须在 CheackAvailability() 方法确认设备可支持 AR 功能后调用。或许可绕过检查进行安装服务,但不支持的总不会真可以运行吧(括弧笑)
You must call <see cref="CheckAvailability"/> before trying to start the installation,
and the <see cref="state"/> must not be <see cref="ARSessionState.Unsupported"/>
or this method will throw <see cref="System.InvalidOperationException"/>.

四、跟踪管理器:Tracked Image/Object Manager


  AR Foundation 针对 “扫描识别” 功能,推出 Tracked Image Manager(识图)Tracked Object Manager(识物) 两种类型的扫描跟踪方式。该两种管理器将根据已注册的 Lib 文件,识别检测画面内容,对符合条件的对象,提供。

public void OnEnable() => this.ARTrackedImageManager.trackedImagesChanged += OnTrackedImagesChanged;

五、关于 Tracked Image Manager


主要核心API

public void OnEnable() { this.ARTrackedImageManager.trackedImagesChanged += OnTrackedImageAdded; }
  • trackedImagesChanged:追踪图像的委托事件。订阅该方法,将允许获取画面内所有跟踪对象的信息。

    • ARTrackedImagesChangedEventArgs:图像事件。提供 Add\Update\Remove 三个阶段的跟踪i信息。

      • eventArgvs.added:当记录的 Lib 出现在画面内。
      • eventArgvs.updated:当记录的 Lib 持续在画面内更新信息。
      • eventArgvs.removed:当记录的 Lib 从画面中消失。

  浅显的理解就是,我们期望扫描的对象发生进入、持续变化、离开相机画面时,返回配置的 Tracked Image、object Lib 信息。基于该三种阶段信息。去落实开发例如:扫描即刷新虚拟物体对象,将虚拟物体对象持续更新至当前被扫描物体图像的位置等内容。

六、关于 AR Tracked Image


记录当前跟踪图像的数据类。当跟踪图像出现在设备相机画面中活动时,会通过 trackedImagesChanged(Action) 返回 added/updated/removed 三种状态下跟踪图像的数据信息内容。想要实现虚拟物体呈现于指定的物理模型位置上,需通过此接口访问。

主要 API

  • extents:2D图片的实际范围(取值 size 的一半)
  • size:2D图片的实际大小(尺寸)
  • nativePtr
  • referenceImage:物理环境下被用于跟踪的 Image 图片的详细信息。直指 Reference Image 配置文件
    • size:图像大小(米) 用于一些平台的需要以改善跟踪流程。
    • width:图像宽度(米)
    • height:图像高度(米)

程序开发:简版扫描器(传递数据信息)


/// <summary>
/// AR Foundation 扫描器
/// </summary>
public class ARScanner : MonoBehaviour
{[Tooltip("AR Tracked Images Manager")]public ARTrackedImageManager TrackedImageMgr;public void Awake() {TrackedImageMgr = transform.TryGetComponent<ARTrackedImagesManager>("[AR] Session Orgin(Clone)");}public void OnEnable(){this.TrackedImageMgr.trackedImagesChanged += OnTrackedImageAdded;this.TrackedImageMgr.trackedImagesChanged += OnTrackedImageUpdated;this.TrackedImageMgr.trackedImagesChanged += OnTrackedImageRemoved;}public void Disable(){this.TrackedImageMgr.trackedImagesChanged -= OnTrackedImageAdded;this.TrackedImageMgr.trackedImagesChanged -= OnTrackedImageUpdated;this.TrackedImageMgr.trackedImagesChanged -= OnTrackedImageRemoved;}public void OnTrackedImageAdded(ARTrackdImagesChangedEventArgvs e){var thisImagesAdded = e.added;foreach(var item in thisImagesAdded){ARDataManager.SaveTF(item.referenceImage.name, item.transform);EventDispatcher.DispatchEvent("Refresh Self", );}}public void OnTrackedImageUpdated(ARTrackdImagesChangedEventArgvs e){var thisImagesAdded = e.added;foreach(var item in thisImagesAdded){ARDataManager.UpdateTF(item.referenceImage.name, item.transform);EventDispatcher.DispatchEvent("Update Position", item.referenceImage.name);}}public void OnTrackedImageRemoved(ARTrackdImagesChangedEventArgvs e){var thisImagesAdded = e.added;foreach(var item in thisImagesAdded){ARDataManager.RemoveTF(item.referenceImage.name, item.transform);}}
}
  • TryGetComponet:自定义扩展方法,用于检测当前 AR Tracked Image Manager 是否为空,空则索引场景内创建的对象。
  • 一般情况下,订阅 trackedImagesChanged 事件,将 Added/Updated/Removed 三周期统一规范至一个订阅即可。但考虑其运用目的,被拆分为三类事件进行订阅,以更好阅读与修改。
  • ARDataManager 是用于持久管理 Tracked Image(物理空间环境下,物理对象在虚拟空间环境下的位置信息)。以供后续 虚拟空间下的虚拟对象获取图像位置信息并同步至该位置处。

后记

  AR 的核心交互围绕物理空间信息与虚拟对象之间。即基于现实空间环境下的虚拟物体交互行为。特别注意的是,交互行为的方式并非完全依赖于虚拟空间环境。例如构建虚拟房间,通过平板扫描呈现在虚拟的房间内移动。其本质上与 VR 完全沉浸无任何差异。显然此种设计方式是完全不可取用的。

【开发指南】AR Foundation 扫描相关推荐

  1. android显示3d模型_使用Unity AR Foundation在增强现实中查看模型

    本文将分享麻省理工学院的教程-使用Unity AR Foundation在增强现实中查看模型. 在本教程中,我们将介绍如何把3D模型导入Unity,并使用Android设备或iOS设备在AR中查看模型 ...

  2. android studio 中配置groovy源码_麻省理工教程:使用Unity AR Foundation在AR中查看模型...

    本文将分享麻省理工学院的教程-使用Unity AR Foundation在增强现实中查看模型. 在本教程中,我们将介绍如何把3D模型导入Unity,并使用Android设备或iOS设备在AR中查看模型 ...

  3. 【开发指南】AR Foundation 开发环境部署

    开发平台:Unity 2020 编程平台:Visual Studio 2022   前言   Unity AR Foundation 是 Unity Technology 提供针对 AR 开发方向的解 ...

  4. 关于出版《AR Foundation增强现实开发实战(ARKit版)》(2022-09-11创建)

      ARKit是苹果公司在前沿科技领域的重大技术布局,也是目前移动领域AR应用开发引擎标杆.得益于良好的软硬件生态整合,ARKit运动跟踪稳定性好.性能消耗低.功能特性丰富,利用它可以开发出令人惊艳的 ...

  5. 关于出版《AR Foundation增强现实开发实战(ARCore版)》(2022-09-15日更新)

       感谢各位读者的支持,书籍目前已上市各大电商平台. ----------- 2022年3月18日创建 ---------   在元宇宙科技浪潮推动下,增强现实(Augmented Reality, ...

  6. asp.net mvc linux,ASP.NET MVC4开发指南PDF扫描版+源码

    ASP.NET MVC问世已久,几年前或许有人会担心ASP.NET MVC框架是否能用在实务的项目上,也担心用在新项目上是否真的能改善开发效率与质量,但笔者这几年下来,已经累积数十个网站项目改用ASP ...

  7. Unity从头开始开发增强现实(AR)游戏学习教程

    使用Unity 2021构建增强现实飞镖游戏 学习从头开始开发增强现实(AR)游戏,使用AR基金会,货币化,发布游戏玩商店 Build a Augmented Reality Dartboard Ga ...

  8. 400 多行代码!超详细 Rasa 中文聊天机器人开发指南 | 原力计划

    作者 | 无名之辈FTER 责编 | 夕颜 出品 | 程序人生(ID:coder_life) 本文翻译自Rasa官方文档,并融合了自己的理解和项目实战,同时对文档中涉及到的技术点进行了一定程度的扩展, ...

  9. 借助Unity AR Foundation构建跨平台AR应用

    Unity是同名游戏引擎的制造商,它在继续推进自己的AR Foundation项目,该项目旨在让开发者可以更容易地创建能够同时在iOS和Android上运行的AR应用.其最新版本增加了对ARKit A ...

最新文章

  1. 活动|跟着微软一起,拥抱开源吧!
  2. JAVA常见算法题(十三)
  3. JVM内存模型与垃圾回收GC
  4. 在 PHP 中使用命令行工具
  5. linux下svn服务器的安装配置和使用
  6. Dubbo -- 系统学习 笔记 -- 示例 -- 只订阅
  7. 亿级流量架构服务降级,写得太好了!
  8. swift-自定义Alert
  9. VSCode下载安装和修改插件下载位置(配置右键菜单)和更换终端
  10. 文件另存为GBK编码格式
  11. 基于51单片机控制的BUCK开关电源Proteus仿真
  12. 成功的发行模式(标题 我自己改的 转至 敏思博客)
  13. 反射Modifier
  14. 荣之学教育简述Shopee虾皮账号被冻结,最常见的2种原因
  15. AMD cpu黑苹果 修改补丁 OpenCore教程
  16. visio双线方框怎么画_visio2013画流程图怎么操作?|visio2013专业版画流程图的方法...
  17. 「面试必背」Java集合面试题(收藏)
  18. easymock平台语法初体验
  19. Android Studio 飞机大战
  20. 固态硬盘分为哪几种_通俗易懂 SSD固态硬盘接口有哪几种类型的图解

热门文章

  1. C# 8.0的新功能三——简化的数组操作
  2. OLED取模软件的编码算法(自己取模时候注意)
  3. java ssm勤工助学岗位管理系统
  4. 计算机科学与技术职业规划怎么写,计算机科学与技术专业职业生涯规划书范文...
  5. [机器翻译] 记一次多语言机器翻译模型的训练
  6. 2018-Guillaume-Interactive Generation of Time-evolving, Snow-Covered Landscapes with Avalanches
  7. 模拟赛20210810A T1
  8. python编写高质量代码_用 Python 编写干净、可测试、高质量的代码
  9. 2022-2028年全球与中国船用频闪灯行业发展趋势及投资战略分析
  10. Mybatis常用标签及属性