【Unity】EasyTouch5触屏检测
Unity AssetStore地址
https://assetstore.unity.com/packages/tools/input-management/easy-touch-5-touchscreen-virtual-controls-3322
从插件名Easy Touch 5 : Touchscreen & Virtual Controls可知,该插件包含了EasyTouch Lite(触摸检测)和Easy Touch Controls(虚拟摇杆)。所以导入项目后能看到下图EasyTouch(触屏检测)和EasyTouchControls(虚拟摇杆)两个文件夹,根据需要查看Demo和文档,别搞错啦。官方Demo放在EasyTouchBundle\EasyTouch\Examples\4.X\SimpleExamples目录中。

Easy Touch4.X老版本的用法
导入EasyTouch插件后,在场景中右键新建EasyTouch—EasyTouch物体,该物体身上的EasyTouch脚本是使用该插件的关键,场景中没有物体挂该脚本,就没法使用插件的功能。
看文档,基于订阅事件的方式。自定义脚本,在OnEnable()中订阅事件,在OnDisable()和OnDestroy()中取消订阅。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using HedgehogTeam.EasyTouch; public class EasyTouch4Demo : MonoBehaviour
{
// 订阅EasyTouch中的事件
private void OnEnable()
{
// 把自定义的事件加到EasyTouch的调用列表中即可
EasyTouch.On_TouchStart += OnTouchStart;
EasyTouch.On_TouchUp += OnTouchEnd;
EasyTouch.On_Swipe += OnSwipe;
} // 取消EasyTouch中的事件订阅
private void OnDisable()
{
EasyTouch.On_TouchStart -= OnTouchStart;
EasyTouch.On_TouchUp -= OnTouchEnd;
EasyTouch.On_Swipe -= OnSwipe;
} // 取消EasyTouch中的事件订阅
private void OnDestroy()
{
EasyTouch.On_TouchStart -= OnTouchStart;
EasyTouch.On_TouchUp -= OnTouchEnd;
EasyTouch.On_Swipe -= OnSwipe;
} /*
* 下面是自定义的方法,用于订阅EasyTouch中的事件。
* 都要求传参HedgehogTeam.EasyTouch.Gesture
*/
void OnTouchStart(Gesture gesture)
{
Debug.Log("OnTouchStart");
Debug.Log("startPosition : " + gesture.startPosition);
} void OnTouchEnd(Gesture gesture)
{
Debug.Log("OnTouchEnd");
Debug.Log("actionTime : " + gesture.actionTime);
} void OnSwipe(Gesture gesture)
{
Debug.Log("OnSwipe");
Debug.Log("swipe : " + gesture.swipe);
}
}
运行后鼠标按屏幕滑动即可看到打印输出。
Easy Touch5.X新版本的用法
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using HedgehogTeam.EasyTouch; public class EasyTouch5Demo : MonoBehaviour
{
// 演示EasyTouch5.x版本的新特新,可不用谢订阅事件等一套语句
private void Update()
{
// 当前帧的当前手势
Gesture currentGesture = EasyTouch.current; if (currentGesture != null) // 不操作时,当前帧的手势返回空,要做为空判断
{
if (EasyTouch.EvtType.On_TouchStart == currentGesture.type)
{
//OnTouchStart(currentGesture);
// 写法1:直接在Update中写逻辑
Debug.Log("OnTouchStart");
Debug.Log("startPosition : " + currentGesture.startPosition);
}
if (EasyTouch.EvtType.On_TouchUp == currentGesture.type)
{
// 写法2:将逻辑抽取为方法,调用方法
OnTouchEnd(currentGesture);
}
if (EasyTouch.EvtType.On_Swipe == currentGesture.type)
{
OnSwipe(currentGesture);
}
}
} /*
* 下面是自定义的方法,用于订阅EasyTouch中的事件。
* 都要求传参HedgehogTeam.EasyTouch.Gesture
*/
void OnTouchStart(Gesture gesture)
{
Debug.Log("OnTouchStart");
Debug.Log("startPosition : " + gesture.startPosition);
} void OnTouchEnd(Gesture gesture)
{
Debug.Log("OnTouchEnd");
Debug.Log("actionTime : " + gesture.actionTime);
} void OnSwipe(Gesture gesture)
{
Debug.Log("OnSwipe");
Debug.Log("swipe : " + gesture.swipe);
}
}
5.X中的EasyTouch是静态单例,可不用在场景中创建EasyTouch对象,运行时会自动创建。但是建议手动新建该物体,因为可以在编辑器中修改EasyTouch脚本的各项属性,而不用在代码中运行时去修改。
Easy Touch5.X新特性——QuickGesture
在给物体添加组件时,可以看到多了EasyTouch选项组,里面一系列Quick开头的脚本(如QuickDrag,QuickSwipe等)都统称为QuickGesture。该特性强大之处在于,加上该脚本就能直接操作物体,如加上QuickDrag后就能使物体可拖拽移动,而不用像之前的写法在监听事件中还要自己写物体位移逻辑,非常的方便!QuickGesture脚本同样可以绑定事件触发的自定义方法。
QuickGesture组件(脚本)有如下:
- Quick Drag:拖拽
- Quick Enter Over Exist:手指进入、悬浮、离开物体
- Quick Long Tap:长按。若要同时监听开始、按下中、结束三个事件,需要给同一物体添加三个该组件。
- Quick Pinch:缩放。同上,三个事件三个组件。(坑:勾上Gesture over me属性时,两指的连线在物体中,也算是手指在物体内,也会触发事件。)
- Quick Swipe:屏幕滑动。可自定义滑动时物体的Transform如何变化,如绕着Y轴旋转等。滑动与拖拽的区别在于,按下时是否有可响应EasyTouch事件的物体,没有测判定为滑动,有则判定为拖拽。
- Quick Tap:点击。可设置单指或双指,也可设置是单击或双击。同一物体中不要同时添加两个该组件来分别监听单击和双击,否则双击时也会触发单击事件。
- Quick Touch:触摸。同样是单一物体挂三个该脚本分别监听按下、按下时、弹起。其中弹起时还分为在物体内松手和在物体外松手的事件。
- Quick Twist:扭曲,顺时针或逆时针的手势,需要双指。同样可用两个组件分别触发扭曲时和扭曲结束的事件。
Easy Touch5.X新特性——EasyTouchTrigger
先编写一个C#逻辑脚本文件。
using System.Collections;
using System.Collections.Generic;
using UnityEngine; /// <summary>
/// EasyTouch5.x新特新--EasyTouchTrigger
/// </summary>
public class EasyTouchTriggerDemo : MonoBehaviour
{
public void PrintMsg(GameObject go)
{
if (go == null)
{
Debug.Log("Null");
}
else
{
Debug.Log(go.name);
}
} public void PrintOK()
{
Debug.Log("OK");
}
}
然后给物体挂上上面的脚本,添加EasyTouch--Trigger组件,自行添加各种事件Add Event及其回调。

注意点:
- 同一手势事件中,可触发多个回调函数。如上图中On_TouchStart事件触发了PrintMsg()和PrintOK()函数。
- 能触发的函数必须是当前物体身上所挂载的脚本中的某一方法。即若物体没有添加上图的EasyTouchTriggerDemo.cs脚本,就不能触发脚本内的方法。
其他Tips
- Quick Pinch和Quick Twist的End事件似乎会冲突,抬手时无法区分。
- QuickGesture中大部分检测手势在物体内才能触发的事件,都要求物体有Collider碰撞器组件。
- EasyTouch支持在PC端开发时模拟双指操作,场景中添加EasyTouch物体(挂有EasyTouch脚本),运行时按Ctrl或Alt后点击鼠标试试。
学习资料 http://www.sikiedu.com/course/91
自用Demo https://gitee.com/guxin233/Unity_Easy_Touch_Demo
【Unity】EasyTouch5触屏检测的更多相关文章
- Unity学习疑问记录之触屏
当将Unity游戏运行到ios或android设备上时,桌面系统中的鼠标左键操作可以自动变为手机屏幕上的触屏操作,但鼠标操作无法实现一些特有的触屏操作,比如多点触屏. 触控对于Android移动设备来 ...
- Unity 触屏缩放模型
现在的手机都是触屏控制的,那么在游戏中我们想通过手指在屏幕上滑动捕获相应的动作呢?Unity官网API中提供了Input类和Touch类,在该类里提供了许多接口.相信只要我们稍微看下,就可以自己应用了 ...
- 触屏设备上的多点触碰检测C++代码实现
转自:http://aigo.iteye.com/blog/2272698 代码还是参考自Epic官方的塔防项目:StrategyGame 看了下C++的API,现成的API中貌似只支持单点触碰检测, ...
- 转:Android随笔之——使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
本文转载自CSDN的jzj1993,原文连接:http://blog.csdn.net/jzj1993/article/details/39158865 有时我们需要使用安卓实现在后台模拟系统按键,比 ...
- Android: 触屏fling/scroll/drag的区别及其详细过程
Google了一下,终于搞清了touch screen下的几种操作模式(对应的是事件). 对于一个view, 常用的操作有点击(click)和长按(long press)二种.实际上,这些操作类型是A ...
- jQuery手机触屏拖动滑块验证跳转插件
HTML: <!DOCTYPE html> <html lang="en"> <head> <title>jQuery手机触屏拖动滑 ...
- JavaScript触屏滑动API介绍
随着触屏手机.平板电脑的普及和占有更多用户和使用时间,触屏的触碰.滑动等事件也成为javaScript开发不可避免的知识,现在何问起就和大家一起学习js的触屏操作,js的触屏touchmove事件,为 ...
- jQuery flickity 滑动触屏
flickity是一款自适应手机触屏滑动插件,它的API参数很丰富,包括对齐方式.循环滚动.自动播放.是否支持拖动.是否开启分页.是否自适应窗口等. 在线实例 实例演示 使用方法 <div cl ...
- 触屏touchstart 与 click
设计效果:当手指点击或触摸红框线menuList之外的部分时,弹框menuList消失. 问题:在优化触屏版的时候发现如图问题,当menuList弹出,手指触摸屏幕向下滑动时,menuList弹框不消 ...
随机推荐
- Windows10下 tensorflow-gpu 配置
引言 越来越多的的人入坑机器学习,深度学习,tensorflow 作为目前十分流行又强大的一个框架,自然会有越来越多的新人(我也刚入门)准备使用,一般装的都是 CPU 版的 tensorflow,然而 ...
- js算法初窥06(算法模式03-函数式编程)
在解释什么是函数式编程之前,我们先要说下什么是命令式编程,它们都属于编程范式的一种.命令式编程其实就是一块一块的代码,其中包括了我们要执行的逻辑或者判断或者一些运算.也就是按部就班的一步一步完成我们所 ...
- node+express+mongodb初体验
从去年11月份到现在,一直想去学习nodejs,在这段时间体验了gulp.grunt.yeomen,fis,但是对于nodejs深入的去学习,去开发项目总是断断续续. 今天花了一天的时间,去了解整理整 ...
- Python3练习题系列(05)——设计和调试规则
If 语句的常见规则 1. 每一个“if 语句”必须包含一个else: 2. 如果这个else 永远都不应该被执行到,因为它本身没有任何意义,那你必须在else 语句后面使用一个叫做die 的函数,让 ...
- [POJ2420]A Star not a Tree?
来源: Waterloo Local 2002.01.26 题目大意: 找出$n$个点的费马点. 思路: 模拟退火. 首先任取其中一个点(或随机一个坐标)作为基准点,每次向四周找距离为$t$的点,如果 ...
- C++并发编程 条件变量 condition_variable,线程安全队列示例
1. 背景 c++11中提供了对线程与条件变量的更好支持,对于写多线程程序方便了很多. 再看c++并发编程,记一下学习笔记. 2. c++11 提供的相关api 3.1 wait wait用于无条件等 ...
- 关于VC预定义常量_WIN32,WIN32,_WIN64(转)
VC2012 下写 Windows 程序时,有时需要判断编译环境.在之前的文章<判断程序是否运行在 Windows x64 系统下.>里说过如何在运行期间判断系统环境,但在编译时如何判断? ...
- tensorflow之数据读取探究(2)
tensorflow之tfrecord数据读取 Tensorflow关于TFRecord格式文件的处理.模型的训练的架构为: 1.获取文件列表.创建文件队列:http://blog.csdn.net/ ...
- iOS开发-工厂模式
工厂模式算是开发中比较常见的设计模式,简单工厂模式,工厂模式和抽象工厂模式,都属于工厂模式.简单工厂模式(simple factory)是类的创建模式,静态工厂方法(static factory me ...
- 微软BI 之SSIS 系列 - XML Task 中XSLT 样式表转换错误记录
开篇介绍 此文章专门记录 XSLT 样式表转换过程中的语法问题 错误一 值与属性的倒置 修改了几次样式表,但还是一如既往的报错,报错信息如下: [XML Task] Error: An error o ...