【问题标题】:Vuforia OntrackingLost Function Doesn't Work when Device tracker is Enabled?启用设备跟踪器后,Vuforia OntrackingLost 功能不起作用?
【发布时间】:2019-02-11 22:09:02
【问题描述】:

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

很遗憾,如果不使用平面地面检测,我们无法在 Vuforia 中锚定对象。

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

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

【问题讨论】:

  • 您希望对象何时丢失?因为当您使用地平面时,您会自动使用Extended Tracking。因此即使对象不在框架中,它也会被跟踪。另外,如果您想在任意位置锚定对象,我会推荐 ARCore,它比 Vuforia 更灵活
  • 如果你想要的话,你也可以看看this

标签: c# unity3d vuforia


【解决方案1】:

您可以将对象与 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);
    }
}

您可以使用它来引用回调(类似于Buttons 的onClick),但这些方法必须期望有一个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);
    }
}

【讨论】:

  • 感谢您的回答,我的问题出在 OnTrackingLost 函数中,该函数再也不会自动触发了!如果启用了地平面检测,何时调用 OnTrackingLost?
  • 我不知道.. 我刚刚为您提供了一个不需要OnTrackingLost的解决方法的答案
  • 感谢您的快速回答,实际上,问题是Vuforia在启用地面检测后不会自动触发OnTrackingLost功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 2016-11-04
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
相关资源
最近更新 更多