小程序网站制作公司,网站建设公司杭州18年,如何去国外网站看内容,济阳县做网站公司写在前面的话
本系列笔记旨在记录作者在学习Unity中的AR开发过程中需要记录的问题和知识点。难免出现纰漏#xff0c;更多详细内容请阅读原文。 文章目录 TrackablesTrackableManager可跟踪对象事件管理可跟踪对象 Session管理 Trackables
在AR Foundation中#xff0c;平面… 写在前面的话
本系列笔记旨在记录作者在学习Unity中的AR开发过程中需要记录的问题和知识点。难免出现纰漏更多详细内容请阅读原文。 文章目录 TrackablesTrackableManager可跟踪对象事件管理可跟踪对象 Session管理 Trackables
在AR Foundation中平面Plane、特征点云Point Cloud、参考点Reference Point、跟踪图像Tracked Image、环境探头Environment Probe、人脸Face、3D物体Tracked Object、共享参与者ARParticipant这8类对象称为可跟踪对象trackables。
对于每一类可追踪对象AR Foundation都为它们准备了一个对应的XXXManager。每种管理器对应管理一类可追踪对象这些管理器可以非常方便的添加或者删除从而可以灵活的对可追踪对象进行处理。且管理器之间的处理事件和API接口十分相似便于掌握。
由于Trackable的姿态信息由AR Session Origin进行管理因此对应的Manager也只能挂载在AR Session Origin上。
TrackableManager
下表展示了八种Trackable对象和它们对应Manager的作用描述
可跟踪对象可跟踪对象管理器描述AR PlaneAR Plane Manager检测与管理平台包括垂直平面与水平平面AR Point CloudAR Point Cloud Manager检测与管理特征点云AR Reference PointAR Reference Point Manager检测与管理参考点可以通过AR Reference Point Manager添加和移除参考点AR Tracked ImageAR Tracked Image Manager检测与管理2D图像跟踪AR Environment ProbeAR Environment Probe Manager管理环境探头生成CubemapsAR FaceAR Face Manager检测与管理人脸跟踪AR Tracjed ObjectAR Tracjed Object Manager检测与管理3D物体对象AR ParticipantAR Participant Manager在多人协作Session中检测和跟踪参与者
可跟踪管理器的实际作用就是对可跟踪对象进行位置追踪姿态计算状态更新但管理器只负责存储可跟踪对象的数据信息而不进行其他处理。例如可跟踪对象可视化是由其他的脚本或者组件完成的。
通过启用或者禁用AR XXX Manager可以启用或禁用对应Trackable对象的跟踪检测功能。由于跟踪对象十分消耗资源因此在不使用时应当禁用或者删除对应Manager。
可跟踪对象事件
每一个可跟踪对象都可以被添加、更新、删除。在每一帧中对应的管理器会对该类所有的可跟踪对象状态进行检测把新的可跟踪对象加进来对现跟踪对象进行姿态更新删除陈旧过时的可跟踪对象。有时我们可能需要在特定事件发生时做一些操作对此所有的管理器都会提供一个事件我们可以“订阅”事件后对一些操作进行对应处理
可跟踪对象可跟踪对象管理器AR Plane ManagerplanesChangedAR Point Cloud ManagerpointCloudsChangedAR Reference Point ManagerreferencePointsChangedAR Tracked Image ManagertrackedImagesChangedAR Environment Probe ManagerenvironmentProbesChangedAR Face ManagerfacesChangedAR Tracjed Object ManagertrackedObjectChangedAR Participant ManagerparticipantsChanged 管理可跟踪对象
在所有Trackable对象中部分完全由manager自动管理如Plane和Face。部分需要手动进行管理如ReferencePoint 和 EnvironmentProbes需要手动添加或者删除。部分则既可自动管理又可手动管理如PointCloud。
由于每一类可跟踪对象都由对应的管理器进行管理因此我们不应该直接尝试去销毁Destroy可跟踪对象其实如果强行使用Destroy()方法销毁可跟踪对象可能会导致应用出错。对于那些可以手动添加和删除的可跟踪对象相应的管理器也提供了删除的方法XXXManager.RemoveXXX()例如移除一个参考点我们只需要调用ARReferencePointManager.RemoveReferencePoint()方法即可。
在添加一个可跟踪对象时AR Foundation需要做一系列的准备工作因此在我们添加一个可跟踪对象后它并不会马上被系统所跟踪直到系统准备完毕并报告可跟踪对象已经添加到AR Foundation系统中这个过程和时间因可跟踪对象类型而异。为明确可跟踪对象状态所有的可跟踪对象都有一个pending属性pending属性为true时标识该可跟踪对象已经被添加但还没有真正添加到AR Foundation跟踪系统中检测这个属性可获取到该可跟踪对象的跟踪情况
1 var referencePoint referencePointManager.AddReferencePoint(new Pose(position, rotation));
2 Debug.Log(referencePoint.pending); // true
3
4 // 当前帧中该方法不会触发
5 void OnReferencePointsChanged(ARReferencePointsChangedEventArgs eventArgs)
6 {
7 foreach (var referencePoint in eventArgs.added)
8 {
9 // 正在跟踪的对象
10 }
11 }添加一个referencePoint后马上检查其状态referencePoint.pending为true意味着该可跟踪对象还未真正添加到AR Foundation跟踪系统因此该管理器的OnReferencePointsChanged事件不会被触发直到真正添加成功可能要在第2帧或者第3帧才能触发。
1 var planeManager GetComponentARPlaneManager();
2 foreach (ARPlane plane in planeManager.trackables)
3 {
4 // 获取到所有正在跟踪的ARPlane
5 }管理器的trackables属性返回一个TrackableCollection集合利用这个集合我们可以使用foreach循环进行遍历。另外我们还可以使用TryGetTrackable()方法获取特定的可跟踪对象该方法只要提供一个TrackableId参数即可跟踪对象的GUID值。
当可跟踪对象管理器检测到一个可跟踪对象后会实例化一个该对象的prefab这个prefab必须要有该类可跟踪对象的对应组件。例如要跟踪Plane平面则指定的prefab需要由AR Plane组件如果Prafab未指定管理器也会创建一个空的Prefab并挂载AR Plane组件。
例如AR Plane Manager检测到一个平面如果PlanePrefab属性有赋值它将用这个prefab实例化一个AR Plane对象如果提供的prefab没有AR Plane组件将自动为其挂载一个如果PlanePrefab属性没有指定AR Plane Manager将创建一个只有AR Plane组件的空对象。 Session管理
AR程序中Session负责管理整个程序的生命周期因此其提供了一些事件用于对应用的操作 也可以用Unity本身的脚本enable方法和Gameobject的setActive方法来实现对Session的管理。