我正在使用Unity和Vuforia SDK开发应用程序。
应用涉及多个标记。 我需要按顺序逐个扫描标记。 检测到一个标记时,将调用OnTrackingFound事件处理程序,并在跟踪丢失时触发OnTrackingLost事件。
问题是当一个标记被另一个标记替换时,不会触发OnTrackerLost事件。
我们可以让OnTrackLost被解雇吗?
我分析了这个场景,发现" OnTrackableStateChanged"当Trackable丢失时,有时不会触发事件,这就是为什么不触发OnTrackLost事件。
是否有任何解决方案以便每次都可以触发OnTrackableStateChanged?
注意:我使用Unity和Vuforia版本:5.3.2
以下是我使用的代码:
using UnityEngine;
using System.Collections;
public class ImageTargetLoading : MonoBehaviour,ITrackableEventHandler
{
private TrackableBehaviour mTrackableBehaviour;
void Start()
{
mTrackableBehaviour = GetComponent<TrackableBehaviour>();
if (mTrackableBehaviour)
{
mTrackableBehaviour.RegisterTrackableEventHandler(this);
}
}
public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus)
{
if (newStatus == TrackableBehaviour.Status.TRACKED || newStatus == TrackableBehaviour.Status.DETECTED || newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
{
OnTrackingFound();
}
else
{
OnTrackingLost();
}
}
}
&#34; OnTrackableStateChanged&#34;事件有时不会被解雇。
答案 0 :(得分:0)
您可以查看Vuforia当前正在跟踪哪个数据集。
或者您可以跟踪当前呈现的对象,如果更改,则调用OnTrackingLost。根据正在跟踪的标记,您可以使某个对象处于活动状态,而其他所有对象都处于关闭状态。有一个脚本可以检查哪个在上一帧上,哪个在上一帧上。如果不相同,则更改了标记跟踪。
在这两种情况下,如果有后果,您需要确保多次调用该方法。其他只是为了它。
答案 1 :(得分:0)
(这更多是对Hardik的回应的答案,因为原始帖子来自2016年,之前是Vuforia 7.2。)
如果您使用的是Vuforia 7.2或更高版本,则默认为所有跟踪器启用扩展跟踪:https://library.vuforia.com/articles/Training/Extended-Tracking。 (只要您在“ Vuforia配置”窗口中为设备启用了POSITIONAL跟踪模式,便是如此。)
从长远来看我不是Vuforia专家,但是在那种情况下,状态更改可能不是TrackableBehaviour.Status.NO_POSE,而是TrackableBehaviour.Status.EXTENDED_TRACKED,它不会调用OnTrackingLost()方法,因为Vuforia仍然可以对跟踪器的位置做出相当不错的假设,即使它实际上无法跟踪它也是如此。