Unity3D EasyTouch使用小结

发表于2017-04-20
评论0 4.6k浏览

1、简介
  EasyTouch能够支持多种触屏操作,点击(Tap),划屏(Swipe),拖拽(Drag),扭(Twist),捏(Pinch)等,基本上对于游戏是足够了。使用也很简单,文档有详细的例子。

2、碰到的问题
  1、拖拽的时候碰到其他的控件后,会替换当前的目标。
  我们使用的是5版本,用的是Gesture.GetCurrentPickedObject() 接口,这个接口调用就获 取当前的目标,所以会导致出现上面的情况。
  解决的办法:使用Gesture.pickedObject,这个目标在开始拖 拽的时候获取,后面拖拽的过 程中 不会被修改,这正是我们需要的

  2、缩放控件后,就没法进行拖动操作了
  在使用Pinch的功能的时候,On_PinchEnd事件基本上不会被调用,经过调试发现是Twist 的触发角度为0,导致每次Pinch完后,都是Twist的状态,从而没法触发On_PinchEnd事 件,也就没法结束Pinch功能。
  解决的办法:就是将Twist的触发角度大于0,或者用不到这个功能,就直接关闭该功能

3、优缺点
 优点:
支持各种触屏操作,上手容易
缺点:
GC太多,顿卡严重
查看源码发现,每帧每个事件触发都会new Gesture,这会导致0.5K左右的GC,
这里需要优化,避免每次都new
5版本还有一个改动就是将finger数量调到了100,如果项目用不到这么多,完全是可以修改到数量的,这里也会省一点内存。为此,我专门向开发团队发了邮件,对方的原文邮件如下:
Hi, 
Unity identifies the fingers by an id, one might expect that this ID matches the finger number, but is not the case. More on very large devices, multiple users can activate the touch.
In the case of multi-touch and especially android, this identifier take a value between 0 & 100
Regards,
 
4、其他
  分析源码的过程中,发现EasyTouch也只是对InputTouch进行了封装。它在编辑器上的模拟是个亮点,对于调试开发很是方便。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引