本文分享一种很常见的AR体验的实现。这种AR体验即,手机相机检测到指定图片/平面/实物之后,虚拟模型随之出现,并允许用户在屏幕上使用手势(例如双指捏合)对该虚拟模型进行选择、缩放、移动、和旋转操作。
这种体验有很多种实现方法。本文分享基于Unity ARFoundation + XR Interaction Toolkit的实现方法。
在创建好Unity AR项目之后(可参看这篇文章),需要完成下面步骤。
- 安装XR Interaction Toolkit
- 在AR Session中添加Interaction Manager
- 在AR Camera中添加需要的Interactor Component
- 在Prefab中添加需要的Interactable Component
- 根据需要,将Prefab和某种track manager 连系在一起
接下来,让我们来看具体操作。
第一步:安装XR Interaction Toolkit
请参考官方文档。
第二步:在AR Session中添加Interaction Manager
点击AR Session, 在Inspector中点击Add Component,搜索并添加Interaction Manager。
添加完成后如下图所示。
第三步:在AR Camera中添加需要的Interactor Component
有很多不同Interactor可以选择,详情见官方文档,例如AR Gesture Interactor、XR Direct Interactor、XR Ray Interactor、XR Socket Interactor。
在手机AR体验中,多是使用基于屏幕的交互,例如基于双指捏合进行缩放,而AR Gesture Interactor对这些交互进行了封装,因此我们需要添加AR Gesture Interactor。
添加方式为:点击AR Camera, 在Inspector中点击Add Component,搜索并添加AR Gesture Interactor。
添加完成之后,需要进行一些设置,见下图:
第四步:在Prefab中添加需要的Interactable Component
有很多不同的Interactable,详情见官方文档。我们想要实现选择、缩放、移动、和旋转操作,就需要将AR Selection Interactable、AR Scale Interactable、AR Translation Interactable、和AR Rotation Interactable,添加到相应的Prefab中。这里的Prefab是指,当手机相机检测到指定图片/平面/实物,你想要展示的那个虚拟物体做成的Prefab,并且这个Prefab需要有合适的Collider Component。
例如:
直接通过Add Component搜索并添加AR Selection Interactable、AR Scale Interactable、AR Translation Interactable、和AR Rotation Interactable即可。我注意到每个Interactable需要设置XR Interaction Manager和AR Session Origin,但我不知道怎么在Prefab中进行设置。后来我发现不设置也是可以的,就空着,然后程序在运行时会自动找到。
第五步:根据需要,将Prefab和某种track manager连系在一起
以上步骤我们都在完成“并允许用户在屏幕上使用手势(例如双指捏合)对该虚拟模型进行选择、缩放、移动、和旋转操作”这一目标。但是怎么样完成“手机相机检测到指定图片/平面/实物之后,虚拟模型随之出现”呢?
对于图片和实物而言,可以在AR Session中添加AR Tracked Image Manager 或者AR Tracked Image Manager,并且将第四步设置好的Prefab直接从Prefab文件夹中拖到Tracked Image Prefab中,就可以了。关于AR Tracked Image Manager中Refered Image Library的简单设置请参考这篇文章。
然后编译就可以运行了!
对于平面检测而言,其实都不用上面的第四步。取而代之的是,在AR Session中添加一个AR Placement Interactable (经过实验之后,它是可以实现选择、缩放、移动、和旋转的),然后把Prefab拖到Placement Prefab参数中,即可。ARFoundation为这种情况提供了一个例子可供参考。