ARFoundation之路-可跟踪对象

版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载。

  在ARFoundation中,平面(Plane)、特征点云(Point Cloud)、参考点(Reference Point)、增强图像(Tracked Image)、环境探头(Environment Probe)、人脸(Face)、3D物体(Tracked Object)这七类对象称为可跟踪对象(trackable),也即是说ARFoundation目前可以实时的跟踪处理这七类对象。当然,这七类对象是否都支持还与平台底层SDK有关,如3D物体跟踪目前只能用在ARKit中。

  为方便管理各类可跟踪对象,ARFoundation为每一类可跟踪对象都建立了一个对应的管理器(Manager),一种管理器只管理对应的一类可跟踪对象,这种设计大大的提高了灵活性,可以非常方便的添加或者删除每类管理器,从而达到只对特定可跟踪对象进行处理的目的。

  需要特别注意的时,可跟踪对象管理器只能挂载在与AR Session Origin相同的一个对象上,这是因为AR Session Origin定义了Session空间与Unity空间的转换关系,可跟踪对象管理器需要利用Session原点及转换关系才能将可跟踪对象定位在Unity空间中的正确位置。一个挂载了所有可跟踪对象的AR Session Origin对象如下图所示。

在这里插入图片描述

(一)可跟踪对象管理器

  添加某种可跟踪对象管理器即可开始对这种类型的可跟踪对象进行管理,删除或者禁用一种可跟踪对象管理器即终止对这种类型的可跟踪对象的管理,Unity对可跟踪对象的这种处理非常简单易用。各管理器与可跟踪对象的对应关系如下表所示。

可跟踪对象可跟踪对象管理器说明
ARPlaneARPlaneManager检测与管理平面,包括垂直平面与水平平面。
ARPointCloudARPointCloudManager检测与管理特征点云。
ARReferencePointARReferencePointManager检测与管理参考点,可以通过ARReferencePointManager.AddReferencePoint 和 ARReferencePointManager.RemoveReferencePoint添加和移除参考点。
ARTrackedImageARTrackedImageManager检测与管理2D图像跟踪。
AREnvironmentProbeAREnvironmentProbeManager管理环境探头生成Cubemaps。
ARFaceARFaceManager检测与管理人脸跟踪。
ARTrackedObjectARTrackedObjectManager检测与管理3D物体对象。

  在添加某类可跟踪对象管理器后,该类可跟踪对象姿态每帧都会被ARFoundation更新,但是管理器并不负责可视化可跟踪对象,即管理器只负责存储可跟踪对象的数据信息,但不对数据进行其他加工处理。

  如前所述,启用或者添加可跟踪管理器将启用某类跟踪功能。例如,可以通过启用或禁用ARPlaneManager来启用或者禁用平面检测功能。另外需要注意的是,跟踪对象是一个非常消耗资源的工作,因此最好在不使用某类可跟踪对象时禁用或者删除其管理器。

(二)可跟踪对象事件

  每一个可跟踪对象都可以被添加、更新、删除。在第一帧中,对应的管理器会对该类所有的可跟踪对象状态进行检测,把新的可跟踪对象加进来、对现跟踪的对象进行姿态更新、删除 陈旧过时的可跟踪对象。有时我们可能需要在特定事件发生时做一些操作,对此,所有的管理器都会提供一个事件,我们可以订阅该事件以做对应处理。

可跟踪对象管理器事件
ARPlaneManagerplanesChanged
ARPointCloudManagerpointCloudsChanged
ARReferencePointManagerreferencePointsChanged
ARTrackedImageManagertrackedImagesChanged
AREnvironmentProbeManagerenvironmentProbesChanged
ARFaceManagerfacesChanged
ARTrackedObjectManagertrackedObjectsChanged

(三)管理可跟踪对象

  ARFoundation中的可跟踪对象,有的可以手动添加删除,有的则是自动管理不需人工参与。如Reference Points和Enveronment probes,这两个可跟踪对象可以手动添加和删除,Plane和Face等其他的可跟踪对象则完全由ARFoundation自动管理。还有一些是既可以自动管理,也可以手动添加删除,如PointCloud。

  由于每一类可跟踪对象都有对应的管理器进行管理,因此,我们不应该直接尝试去销毁(Destroy)可跟踪对象,其实如果强行使用Destroy销毁可跟踪对象可能会导致应用出错。对于那些可以手动添加和删除的可跟踪对象,相应的管理器也提供了删除的方法,例如移除一个参考点,我们只需要调用ARReferencePointManager.RemoveReferencePoint()方法即可。

  同时,添加一个可跟踪对象ARFoundation需要做一系列的准备工作,因此,在我们添加一个可跟踪对象后,它并不会马上就被系统所跟踪,直到系统准备完毕并报告可跟踪对象已经添加到ARFoundation系统中,这个过程和时间因可跟踪对象类型而异。为明确可跟踪对象状态,所有的可跳跃对象都有一个pending属性,pending属性标识该可跟踪对象已经被添加但还没有真正添加到ARFounddation跟踪系统中,检测这个属性可获取到该可跟踪对象的跟踪情况。

var referencePoint = referencePointManager.AddReferencePoint(new Pose(position, rotation));
Debug.Log(referencePoint.pending); // "true"

// -- 当前帧中该方法不会触发--
void OnReferencePointsChanged(ARReferencePointsChangedEventArgs eventArgs)
{
    foreach (var referencePoint in eventArgs.added)
    {
        // 正在跟踪的对象
    }
}

  在上述代码中,在添加一个ReferencePoint后马上检查其状态,referencePoint.pending为true,意味着该可跟踪对象还未下真正添加到ARFounddation跟踪系统中,因此该管理器的OnReferencePointsChanged事件不会被触发,直到真正添加成功(可以要在第二帧或者第三帧才能触发)。

  遍历可跟踪对象可以通过相应的管理器进行,如以下代码所示:

var planeManager = GetComponent<ARPlaneManager>();
foreach (ARPlane plane in planeManager.trackables)
{
    // 获取到所有正在跟踪的ARPlane
}

  如上代码所示,管理器的trackables属性返回一个TrackableCollection集合,利用这个集合,我们可以使用foreach循环进行遍历。另外,我们还可以使用TryGetTrackable()方法去获取特定的可跟踪对象。

  有时我们可能会禁用正在跟踪的对象的行为,但又不是完全禁用管理器对可跟踪对象的管理,例如我们可能不想渲染已被检测到的平面,但又不是禁用平面检测功能。那么这时我们可以通过遍历对特定或者全部的正在跟踪的对象进行处理即可,如下代码所示。

var planeManager = GetComponent<ARPlaneManager>();
foreach (var plane in planeManager.trackables)
{
    plane.gameObject.SetActive(false);
}

  在上面代码中,我们将所有检测到的平面禁用。

  可跟踪对象管理器检测到一个可跟踪对象后将会实例化一个该对象的prefab,这个prefab必须要有该类可跟踪对象的对应组件。如果没有提供这个prefab,管理器将创建一个空的挂载该类可跟踪对象组件的对象,如果提供的prefab没有挂载该类可跟踪对象的对应组件,管理器将为其添加一个。例如Plane Mnager检测到一个平面,如果Plane Prefab属性有赋值它将用这个prefab实例化为一个对象,如果提供的prefab没有ARPlane组件,将自动为其挂载一个,如果Plane Prefab属性没有指定,Plane Mnager将创建一个只有ARPlane组件的空对象。

参考文献

Trackable Managers Trackable Managers

### 回答1: Unity AR Foundation是一个基于Unity引擎的增强现实(AR)开发框架。该框架旨在简化AR开发过程,使开发者能够轻松地在Unity创建AR应用程序。Unity AR Foundation提供了许多功能,包括跟踪和定位,平面检测,虚拟对象插入和交互等。使用Unity AR Foundation,开发者可以将虚拟内容与现实世界的场景交互,创造出更加真实和沉浸式的AR体验。 ### 回答2: Unity AR Foundation是Unity公司推出的一个增强现实(AR)开发框架。该框架基于现有的Unity开发平台,为用户提供了一个高效、易用、全面的AR开发环境,能够帮助用户很容易地实现AR项目的设计、开发和测试。 这个框架能够通过一些先进的AR技术和算法,如图像识别、SLAM、声音识别等,将体感设备与现实世界相连,从而使开发者实现了更加生动、逼真的AR体验。Unity AR Foundation还结合了可能由多个AR平台共同使用的多个AR平台,如ARCore、ARKit,从而实现了更广泛的应用覆盖。 Unity AR Foundation最大的特点就是让AR开发者得以从日渐浓重的技术栈之脱身,并更专注于低级别的算法和创意的应用AR Foundation提供了一个清晰的基础依赖项结构,包括识别和翻译外部AR设备数据流的摄像机定位、输入系统、对象观察和手势识别。这样,用户不仅可以使用它提供的基于物理的AR组件,还可以在Unity创建针对自己特定需求的组件。此外,它还提供了丰富的AR材料库和AR资源,为AR项目的开发提供了必要的素材支持。 公认的是,AR是未来的发展趋势。无论是在游戏开发、文化传承、数字营销等领域,AR技术都将开辟新的篇章。而Unity AR Foundation的机遇就在于他作为较为成立的AR框架之一,为广大的AR开发者提供了一个机会,让他们可以尝试更加复杂、多样和创新的应用,并为更高质量的产品呈现集大成的AR技术。 ### 回答3: Unity AR Foundation 是基于Unity引擎的增强现实框架,可以帮助开发者更加快速地开发出高质量的增强现实应用程序。它包含了一系列功能丰富的工具和组件,允许开发者在不同的设备上实现增强现实效果,无论是在ARKit或ARCore平台上,还是在基于浏览器的Web AR应用程序。 Unity AR Foundation 可以大大简化AR应用程序的开发流程,因为它提供了与现有的AR平台无缝集成的工具和组件。除此之外,Unity AR Foundation 还提供了一些重要的功能,比如物体跟踪、平面检测、手势识别和虚拟现实等。 这个框架允许开发者创建逼真的虚拟体验,将虚拟物体投影到到真实世界。这对于游戏行业、社交媒体和其他商业用途都有广泛的应用。例如,通过Unity AR Foundation,开发者可以创建具有交互性的广告,展示他们的产品,创造更具吸引力和互动性的展示形式。 总之,Unity AR Foundation 是一个非常有用的增强现实框架,可以协助开发者简化并加速AR应用的开发过程。这个框架和基于AR应用程序一样,具有广泛的适用性和创新性潜力,将改变我们生活和工作的方式。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_DavidWang_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值