如何使用Unity ARFoundation和XR Interaction Toolkit对Prefab进行选择、缩放、移动、和旋转操作?

本文分享一种很常见的AR体验的实现。这种AR体验即,手机相机检测到指定图片/平面/实物之后,虚拟模型随之出现,并允许用户在屏幕上使用手势(例如双指捏合)对该虚拟模型进行选择、缩放、移动、和旋转操作。

这种体验有很多种实现方法。本文分享基于Unity ARFoundation + XR Interaction Toolkit的实现方法。

在创建好Unity AR项目之后(可参看这篇文章),需要完成下面步骤。

  1. 安装XR Interaction Toolkit
  2. 在AR Session中添加Interaction Manager
  3. 在AR Camera中添加需要的Interactor Component
  4. 在Prefab中添加需要的Interactable Component
  5. 根据需要,将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为这种情况提供了一个例子可供参考。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_35153254/article/details/128321097