首页 > 解决方案 > 启用设备跟踪器后,Vuforia OntrackingLost 功能不起作用?

问题描述

我面临以下问题:当我想将一个对象放置在它移动的场景中时,我需要它留在它的位置,所以它必须是一个锚对象。

不幸的是,如果不使用平面地面检测,我们就无法在 Vuforia 中锚定对象。

而且在“启用平面地面检测”之后,增强对象出现并且永远不会丢失,并且不会触发“onTrackingLost”功能。似乎这个函数没有被自动调用并且不起作用!

请问我们该如何解决这个问题?!

标签: c#unity3dvuforia

解决方案


您可以将对象与 vuforia 目标分离 - 使其不是子对象,而是将其设置在层次结构中的其他位置 - 并且仅将其移动到正确的坐标OnTargetFound

添加例如UnityEvent<Transform>喜欢(这将转到 vuforia 目标)

[system.Serializable]
public class TransformEvent : UnityEvent<TargetFoundEventHandler>
{
}

public class TargetFoundEventHandler : DefaultTrackableEventHandler
{
    public TransformEvent onTrackingFound;

    protected override void OnTrackingFound()
    {
        onTrackingFound.Invoke(transform);
    }
}

您可以使用它来引用回调(类似于onClickof Buttons),但这些方法必须期望一个TargetFoundEventHandler参数,例如(这将转到要放置的对象)

public class PlaceMeOnTarget()
{
    public void PlaceOnTarget(TargetFoundEventHandler target)
    {
        transform.SetPositionAndRotation(target.transform.position, target.transform.rotation);

        // optinally remove the callback so this object
        // will not be placed elsewhere
        target.onTrackingFound.RemoveListener(PlaceOnTarget);
    }
}

推荐阅读