c# - 启用设备跟踪器后,Vuforia OntrackingLost 功能不起作用?
问题描述
我面临以下问题:当我想将一个对象放置在它移动的场景中时,我需要它留在它的位置,所以它必须是一个锚对象。
不幸的是,如果不使用平面地面检测,我们就无法在 Vuforia 中锚定对象。
而且在“启用平面地面检测”之后,增强对象出现并且永远不会丢失,并且不会触发“onTrackingLost”功能。似乎这个函数没有被自动调用并且不起作用!
请问我们该如何解决这个问题?!
解决方案
您可以将对象与 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);
}
}
您可以使用它来引用回调(类似于onClick
of Button
s),但这些方法必须期望一个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);
}
}
推荐阅读
- java - 无法将 JAVA_HOME 变量指向 java 安装的位置
- php - php - 依赖注入
- javascript - 用Javascript改变占位符颜色的方法
- wpf - 将命令绑定到 HierarchicalDataTemplate MenuItem
- angular - 角度代理配置不起作用
- python - 在 tkinter 按钮中调用一个变量,它也运行一个函数
- dart - 带有嵌套 AnimatedList 的 Firestore StreamBuilder
- java - 如何根据所选日期更改我的列表数据?
- angular - 以角度创建第一个项目时出错
- python - 在 Python 中存储和比较多个属性