EasyTouch----手势控制
目前市场上流行的AR产品,以儿童教育产品居多,这些产品中大多会有手势交互的功能,本节内容主要跟大家讲解如何在AR产品中加入手势交互的功能。设想以下场景,当识别一个动物的卡片之后,会出现该动物的3D立体影像,当识别丢失之后,动物模型会停留在屏幕中心,并可以通过手势控制模型的旋转和缩放。
我们要实现模型脱卡的功能,这个功能的实现已经在本章第二节的时候详细讲解,在本节不再赘述。
关于手势控制,最原始的方式是通过Unity 3D自带的Input类进行处理,但是为了能够快速实现我们想要达到的效果,我们可以借助一些插件来实现,关于手势处理的插件有Finger Gesture, LeanTouch, EasyTouch等。本节我们主要通过EasyTouch这个插件来讲解手势控制功能(本节使用的插件版本为EasyTouch 5)。
接下来,我们就逐步讲解EasyTouch的使用方法。
操作方法
- 01
1、查看EasyTouch案例场景。正确导入EasyTouch插件之后,在Project视图中找到QuickGesture案例场景,这个场景中展示了插件中大部分手势的案例,该场景打开后的界面如下图所示:
- 02
2、上图中的场景一共展示了下列手势:(1)Touch:触摸手势(2)Tap:点击手势(3)Long Tap:长按手势(4)Drag:拖动手势(5)Enter Over Exit:滑过手势(6)Double Tap:双击手势(7)Swipe:滑动手势(8)Twist:扭转手势(9)Pinch:两个或多个手指挤压,常用于缩放 3、 EasyTouch初始化 EasyTouch初始化的方式非常简单,我们只需要在场景中创建一个空的GameObject,然后将其命名为EasyTouch,然后在Inspector面板上点击AddComponent添加EasyTouch.cs脚本文件,这样就完成了EasyTouch的初始化。 旋转模型 初始化模型的工作完成之后,接下来我们演示旋转模型的实现方式,我们查看前面提到的案例场景中的Horizontal Swipe下的物体,我们发现当我们用鼠标在该物体上左右滑动时,就可以让物体发生水平方向的旋转,我们查看被旋转物体上的组件信息,发现该物体拥有一个名为QuickSwipe的组件。 因此,只要我们给需要旋转的物体添加QuickSwipe组件,即可让物体根据手势滑动的方向进行方向的旋转。QuickSwipe组件的参数如下图所示:
- 03
4、 上图中Swipe direction选项表示判断手势滑动的方向,该选项可以设置不同方向的手势判断,例如Horizontal表示水平方向,Vertical表示竖直方向。Action中的选项为当手势触发之后,所影响的物体会发生哪些类型的动作,在这里可以选择的动作有Rotate(旋转),Translate(移动),Scale(缩放),在此我们只需选择Rotate选项即可。Affected axes表示被影响的坐标轴,如果我们是水平方向渲染,则选择Y轴。Sensibility表示灵敏度,可以根据灵敏度调整旋转的速度,Inverse axis表示反向。 缩放模型 缩放模型在手机App当中一般是通过两个手指在触摸屏幕上的距离的远近来控制模型的大小,因此我们采用EasyTouch中另外一种Pinch事件,在上述案例场景中我们可以看到这个事件,但是我们在Unity编辑器中无法通过鼠标模拟多点触控,EasyTouch的解决方案是:首先用Ctrl +鼠标左键确定第一个手指的位置,然后通过Alt+鼠标左键来控制第二个手指的位置与第一个手指位置之间的距离。图示如下:(1)Ctrl +鼠标左键确定第一个手指位置
- 04
(2)通过Alt+鼠标左键滑动控制模型缩放
- 05
5、 我们在实现自己的缩放控制的时候,EasyTouch给我们提供的接口也特别简单,跟旋转模型类似,我们只需要给需要被旋转的物体加上一个QuickPinch组件即可,但是不要忘记给物体再添加一个碰撞器组件。 6、 拖拽模型拖拽模型是指,当鼠标或手指选择屏幕中的某个物体之后,拖动手指,物体会跟随手指进行移动,如果不借助插件来实现,我们实现的步骤如下:(1)通过Unity中的Input类,获取当前鼠标的位置或触摸点的位置,返回的坐标信息为屏幕坐标。(2)将获取到的屏幕坐标转换为世界坐标,这个步骤可以通过Camera中的ScreenToWorldPoint方法来实现。(3)将模型的位置移动到转换后的世界坐标位置。上述实现的过程比较麻烦,因此我们直接采用EasyTouch中的QuickDrag组件实现。我们只需要给需要被拖动的物体添加QuickDrag组件。如果要实现两个手指拖动,则只需要给被拖动的物体添加TwoDragMe这个脚本组件就可以实现。本节关于手势控制的内容已经完结,其实EasyTouch还拥有其他一些手势控制和功能,大家可以参考它的帮助文档。