Vuforia:OnTrackableStateChanged事件有时不会被触发

时间:2016-06-15 13:41:28

标签: unity3d vuforia

我正在使用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;事件有时不会被解雇。

2 个答案:

答案 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仍然可以对跟踪器的位置做出相当不错的假设,即使它实际上无法跟踪它也是如此。