Unity EasyTouch官方案例学习
一、代码检测手势事件
1. EasyTouch4.x 写法

首先要手动在 Hierarchy 窗口添加 EasyTouch 物体,以触摸(Touch)手势为例,代码如下:
using UnityEngine;
using HedgehogTeam.EasyTouch; // 注意 using public class TouchMe : MonoBehaviour { private TextMesh textMesh;
private Color startColor; // 注册事件
void OnEnable(){
EasyTouch.On_TouchStart += On_TouchStart;
EasyTouch.On_TouchDown += On_TouchDown;
EasyTouch.On_TouchUp += On_TouchUp;
} void OnDisable(){
UnsubscribeEvent();
} void OnDestroy(){
UnsubscribeEvent();
} // 注销事件
void UnsubscribeEvent(){
EasyTouch.On_TouchStart -= On_TouchStart; // 触摸开始
EasyTouch.On_TouchDown -= On_TouchDown; // 触摸进行时
EasyTouch.On_TouchUp -= On_TouchUp; // 触摸结束
} void Start () {
// 获取组件
textMesh =(TextMesh) GetComponentInChildren<TextMesh>();
startColor = gameObject.GetComponent<Renderer>().material.color;
} // 触摸开始
// 注意时间函数需要包括一个 Gesture 参数
private void On_TouchStart(Gesture gesture){
if (gesture.pickedObject == gameObject){
// 随机颜色
RandomColor();
}
} // 触摸进行时
private void On_TouchDown(Gesture gesture){ // Verification that the action on the object
if (gesture.pickedObject == gameObject){
// 显示触摸事件持续时间
textMesh.text = "Down since :" + gesture.actionTime.ToString("f2");
} } // 触摸结束
private void On_TouchUp(Gesture gesture){
// Verification that the action on the object
if (gesture.pickedObject == gameObject){
// 恢复原来的显示
gameObject.GetComponent<Renderer>().material.color = startColor;
textMesh.text ="Touch me";
}
} // 随机颜色
private void RandomColor(){
gameObject.GetComponent<Renderer>().material.color = new Color( Random.Range(0.0f,1.0f), Random.Range(0.0f,1.0f), Random.Range(0.0f,1.0f));
}
}
该代码主要实现当触摸物体的时候,随机改变颜色并显示触摸事件持续时间,触摸结束则恢复原来的显示。
注意:触摸指手机端手指触摸屏幕,等同于 PC 端鼠标单击。另外要记得注销事件。
另外还有手势事件:Tap, Long Tap, Double tap, Drag 等,实现类似。
另外如果要实现双手指操作,只需要在相应的 api 函数后面加上 2Fingers 即可,如 On_TouchStart2Fingers。
EasyTouch 在 PC 端可以通过以下的方式模拟双手操作:
ctrl + 鼠标左键点击确定第一个手指位置,然后 alt + 鼠标左键点击确定第二个手指位置。
2. EasyTouch5.x 写法
5.x 之后就不需要手动添加 EasyTouch 了,系统会自动添加,但还是建议手动添加。以滑动(Swipe)手势为例,代码如下:
public class RTS_NewSyntaxe : MonoBehaviour {
void Update () {
// 获取当前手势
Gesture current = EasyTouch.current;
if (current == null)
return;
// 滑动时实现组件移动
if (current.type == EasyTouch.EvtType.On_Swipe){
transform.Translate( Vector3.left * current.deltaPosition.x / Screen.width);
transform.Translate( Vector3.back * current.deltaPosition.y / Screen.height);
}
}
可以看到我们可以在 Update 函数里实时检测手势类型了。其他手势类型实现类似。
二、QuickGesture

EasyTouch5.x 提供了更方便的实现手势识别方式 QuickGesture。
以手势长按(LongTap) 为例,在需要添加手势的物体上添加组件 QuickLongTap,组件属性如下:

其中 Name 用来在代码里查找并做相应属性修改。该组件属性实现了当开始点击这个物体的时候修改物体的颜色。
如果我们需要同时在点击时对物体做相应处理,那么我们可以再增加一个 QuickLongTap 组件,将 ActionTriggering 修改为 InPress,如下:

相应的控制代码部分如下:
// 修改物体颜色
public void ChangeColor(Gesture gesture){
RandomColor();
} // 显示按压时间持续时间
public void TimePressed(Gesture gesture){
textMesh.text = "Down since :" + gesture.actionTime.ToString("f2");
}
当然还有其他 QuickSwipe, QuickPinch(缩放), QuickEnterOverExit(注意这是为手机端的进入出去,所以是按压状态下的进入出去), QuickTouch 等。
三、核心组件 EasyTouch

1. GUI compatibilty

若取消勾选 UnityUICompatibility,则 EasyTouch 事件将不会对 UGUI 产生效果。
若勾上 AutoupdatepickedUnityUI,则 EasyTouch 每一帧都会更新 currentGessture。(就是如果你不勾选在你移动过程中 currentGessture 会一直为刚点击时的信息)
2. 接下来的属性还是没有搞懂 TODO
四、虚拟摇杆 JoyStick

首先创建一个 Joystick 物体,如上所示。属性如下:

1. Position & Size

当前 Type 为 Static,若勾上 NoReturnOfTheThumb,则我们把摇杆拉出去后不会自动移回原来的位置。
若将 Type 选为 Dynamic,属性如下:

摇杆默认是不显示的,只有我们点击相应区域时,才会出现摇杆。我们也可以设置摇杆可以出现的区域,通过设置 JoystickArea。
2. Axes properties

若勾上 EnableUnityAxes,则我们在 PC 端也可以使用方位键来模拟摇杆方向。
若勾上 Turn & Move Direction Action ,则摇杆会同时控制物体的移动和转向。我们也可以勾上 Lock in jump 来使当我们跳跃的是否禁止转向和移动。
有些时候游戏物体需要运行游戏后才能创建,name我们可以勾上 Auto link on tag 来通过标签来寻找控制的游戏物体。
3. Camera

勾上 Enable tracking 之后,我们就可以实现相机跟随了。我们可以自定义跟随物体,也可以通过 tag 查找跟随物体。
Camera mode 有 Follow 和 Smooth Follow 两种。当我们选择 Follow 就是简单的相机跟随,保持偏移不变。而当我们选择 Smooth Follow 时,当我们物体方向改变时,摄像机的方向也会跟着改变,从而我们只能看到物体的背部。
4. Sprites

我们可以将摇杆修改为我们自制的图片。
5. Events

我们可以注册相应的事件函数,当事件发生的时候调用相应的函数。
Unity EasyTouch官方案例学习的更多相关文章
- Unity Dotween官方案例学习
本文只涉及一些案例,具体查看 DoTween 官方文档. 一. Basics public class Basics : MonoBehaviour { public Transform redCub ...
- Unity XLua 官方案例学习
1. Helloworld using UnityEngine; using XLua; public class Helloworld : MonoBehaviour { // Use this f ...
- 8.3 ContosoMVCWeb官方案例学习
1. 分页案例学习 2. 排序搜索案例学习 3.使用Configuration.cs中的Seed方法 在数据库迁移过程中,使用update-database,会运行seed方法.seed方法能够将初始 ...
- Egret官方案例学习笔记
1.资源记载方式 (1)Egret引擎是2.0.5. (2)resource/resource.json文件是: { "resources": [ { "name&quo ...
- Unity XLua 官方教程学习
一.Lua 文件加载 1. 执行字符串 using UnityEngine; using XLua; public class ByString : MonoBehaviour { LuaEnv lu ...
- UE4的AI学习(2)——官方案例实例分析
官方给出的AI实例是实现一个跟随着玩家跑的AI,当玩家没有在AI视野里时,它会继续跑到最后看到玩家的地点,等待几秒后如果仍然看不到玩家,则跑回初始地点.官方的案例已经讲得比较详细,对于一些具体的函数调 ...
- Unity CommandBuffer的一些学习整理
1.前言 近期在整理CommandBuffer这块资料,之前的了解一直较为混乱. 算不上新东西了,但个人觉得有些时候要比加一个摄像机再转RT廉价一些,至少省了深度排序这些操作. 本文使用两个例子讲解C ...
- 通过angularJS官方案例快速入门
官方案例-angular-phonecat angularJS官方提供了一个官方案例给大家进行循序渐进的学习,但是如果之前没有接触过node.js以及git的同学这个案例拿着也无从下手-这里就介绍一下 ...
- Siki_Unity_2-4_UGUI_Unity5.1 UI 案例学习
Unity 2-4 UGUI Unity5.1 UI 案例学习 任务1-1:UGUI简介 什么是GUI: 游戏的开始菜单 RPG游戏的菜单栏.侧边栏和功能栏(比如背包系统.任务列表等) 设计用来控制移 ...
随机推荐
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
前言 由于在开发My Blog项目时使用了大量的技术整合,针对于部分框架的使用和整合的流程没有做详细的介绍和记录,导致有些朋友用起来有些吃力,因此打算在接下来的时间里做一些基础整合的介绍,当然,可能也 ...
- 一段刚刚出炉的CSV文件转换为DataTable对象的代码
CSV是以文本形式保存的表格数据,具体是每列数据使用逗号分割,每行数据使用CRLF(\r\n)来结尾,如果数据值包含逗号或CRLF则使用双引号将数值包裹,如果数据值包含双引号则使用两个双引号做为转义. ...
- linux sqlplus查询数据中文乱码解决方法记录
locale-gen -lang en.US.UTF-8 重启.
- XSS详解
什么是XSS(跨站脚本攻击) XSS又叫CSS (Cross Site Script) ,跨站脚本攻击.它指的是恶意攻击者往Web页面里插入恶意html代码或者javascript代码,当用户浏览该页 ...
- DOM操作XML文件
一.IE中的XML(IE低版本才支持) 在统一的正式规范出来以前,浏览器对于 XML 的解决方案各不相同.DOM2 级提出了动态创建 XML DOM 规范,DOM3 进一步增强了 XML DOM. 所 ...
- 【转】浅谈一个网页打开的全过程(涉及DNS、CDN、Nginx负载均衡等)
1.概要 从用户在浏览器输入域名开始,到web页面加载完毕,这是一个说复杂不复杂,说简单不简单的过程,下文暂且把这个过程称作网页加载过程.下面我将依靠自己的经验,总结一下整个过程.如有错漏,欢迎指正. ...
- threedLocal设计原因及详解
ThreedLocal在中文的翻译中应该翻译成:线程局部变量. 1:设计的原因 在并发编程的时候,成员变量如果不做任何处理其实是线程不安全的,各个线程都在操作同一个变量,显然是不行的,并且我们也知道v ...
- Android自定义布局的背景在多分辨率的情况下设置fill_parent时背景不能够横向全屏的问题解决
问题描述:最近做了一个自定义的控件LinearLayout就是公用的底部菜单条,在指定分辨率下(例如:480x800,480x854)下背景是正常的,但是当程序运行到非指定(默认)的分辨率下就不正常了 ...
- 蓝桥杯 历届试题 九宫重排 (bfs+康托展开去重优化)
Description 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的 ...
- SSIS ->> Excel Destination无法接受大于255个字符长度的字符字段
从下文的链接中找到一些背景,因为Excel会以前8行作为参考,如果某个字段前8行的最长长度没有超过255个字符,就会报错.如果知道某个字段属于描述性字段,而且字段的数据长度很可能超过255个字符长度, ...