如果有人可以提供任何可以帮助我了解Android Vuforia samples如何工作的来源,我会感激不尽?我已经安装了所有东西,可以在手机上运行它们但是很难理解项目结构。
如果有关于如何使用AR
(而非Android Studio
)创建最简单的Unity
应用的任何教程,那将会很棒。
我还学会了如何使用Unity创建AR场景,将它们导出到Android并在设备上运行,但仍然不了解如何在Android Studio中进一步使用导出的项目。
我的目标是拥有一个图像目标和多个3D对象。我希望像ListView
这样的简单UI来选择要放在目标上的对象。
此外,是否可以使用Android构建ListView
,并在其项目的点击事件中切换3D对象,在Unity中创建的单个场景中使用另一个?我知道我可以使用Unity C#脚本动态加载3D模型,所以我可以通过Android触发该脚本中的某些功能吗?
我真的很感激任何建议。
答案 0 :(得分:3)
要点:
首先,您将图片上传到Vuforia云,以便返回xml和.dat文件。那些存储在Streaming Assets中的。 dat文件包含有关标记的二进制格式的所有信息。 xml包含有关名称和大小的信息,并链接到C#组件。
Vuforia允许创建运行时标记或云标记,但我们暂时将其留下。这个想法保持不变。
当您运行应用程序时,相机硬件CH(不是Unity相机,记住这一点),提供了一个Feed。该Feed在Unity场景中的纹理上渲染,Unity摄像头UC面向该纹理。那些是固定在空间中的,只有纹理的内容用CH提供每个帧的内容来更新。 这是您应用的真实情况。
同时,Vuforia扫描CH提要并执行模式识别https://en.wikipedia.org/wiki/Pattern_recognition,尝试找到与您提供的dat文件匹配的模式。 当找到模式时,它执行第二次运行以定义该模式相对于CH的距离和旋转。这是可能的,因为xml文件包含真实标记的尺寸。如果xml表示50x50并且你的标记是25x25,它将是预期的两倍,因为系统理解标记比实际距离更远。
当识别出标记时,Vuforia会调用DefaultTrackableEventHandler上的状态侦听器(检查模型父节点上的脚本),它实现了这个方法:
public void OnTrackableStateChanged(
TrackableBehaviour.Status previousStatus,
TrackableBehaviour.Status newStatus)
{
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRACKED ||
newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
{
OnTrackingFound();
}
else
{
OnTrackingLost();
}
}
基本上,如果Vuforia检测到更改,则会调用该方法。然后你可以传播事件进一步使OnTrackingFound / Lost公共事件进入任何可以注册的事件。或者创建一个实现ITrackableEventHandler的新脚本。这只是关于模型被发现或丢失的倾听。在示例中,找到时,它显示模型,反之亦然。这是最可能和最基本的情况,但任何事情都可以触发。
计算结果表示变换(位置,旋转)。该Transform将传递给场景中的第二台Unity摄像机。坐标用(0,0,0)定义为标记的位置。它很可能针对您放置的3D模型。请注意,您可以将模型放置在场景中的任何位置,它只是偏移。无法控制Vuforia相机,如果您尝试将值传递给Transform,它们会被Vuforia覆盖。你并不打算玩那些价值观。另一方面,你可以打开和关闭它,影响一些渲染等等。
第一个UC具有较低的深度,因此它首先渲染真实场景,第二个渲染在顶部,它通过3D模型增强了现实。使用一组图层蒙版,第二个相机会忽略场景的其余部分,因此仅考虑模型。
你真的不想玩背景信息,但你肯定希望与模型交互,这样做,就像任何普通场景一样。抓住Vuforia相机的相机组件并从前向方向进行光线投射。检查你的命中并采取行动。