一、Touch结构体介绍
1、Touch是一个结构体,每当发生一次触摸,系统生成一个Touch类型的变量,存储本次触摸的相关信息;如果发生多点触控,那么系统就会生成多个Touch类型的变量。
2、Touch结构体主要由以下成员变量:
①positon :触摸位置的坐标,是Vector2类型
②deltaPosition:触摸的位置变化量Vector2类型,当手指接触屏幕,向某一方向滑动时起始位置到终止位置的变化量
③deltaTime:触摸的时间变化量,是float类型
④phase:触摸所处阶段TouchPhase类型
⑤tapCount:单机数量,可以自动检测手指单机屏幕的次数
3、TouchPhase是枚举类型,主要包含以下5种类型状态:
①Began:手指开始接触屏幕
②Moved:手指接触屏幕并在屏幕上滑动
③Stationary:手指接触屏幕并保持不动
④Ended:手指离开屏幕
⑤Canceled:取消本次触摸的跟踪
4、Input类除了可以得到键盘与鼠标的输入值外,还可以得到手指触控
①Input.GetTouch(index:int):按序号获取触摸点(首个触摸点序号为0),返回Touch。
例如:Inpute.GetTouch(0).phase==TouchPhase.Moved
说明:Input.GetTouch(0)返回Touch结构体,Touch.phase返回TouchPhase枚举类型。
②Input.touchCount是静态整形变量,当一只手指接触到屏幕上时返回1,两个手指在屏幕上时返回2,以此类推。
③Input.touchs返回一个Touch类型数组,保存当前所有触摸点生成的Touch类型变量
二、手指触控的常见方式
1、手游的开发过程中一般都具备以下触控方式:
①手指(在屏幕上)上、下、左、右滑动方向的识别
②手指双击识别
③手指停留识别
④双指触控识别
2、实现一个上、下、左、右滑动示例:
/***
*
* Title:
* 第23章_Unity游戏移植于手指触控识别
*
* Description:
* 功能:
* 1: 划屏触控识别。
* 上、下、左、右。
* 2: 识别手指双击
* 3: 手指停留
*
* Date: 2019
*
* Version: 1.0
*
* Modify Recorder:
*
*/
using UnityEngine;
using UnityEngine.UI;
public class IdentityFinger : MonoBehaviour {
/* 控件显示 */
public Text _TxtLeftRightTips; //左右划屏测试
public Text _TxtUpDownTips; //上下划屏测试
public Text _TxtDoubleClickTips; //双击划屏测试
public Text _TxtFingerStationaryTips; //停留划屏测试
//手指滑屏
private Vector2 _VecDeltaArea; //滑屏区域
//手指双击
private bool _BoolSecondClick = false; //是否为第二次点击
private float _FloFirstTime = 0F; //第一次点击时间
private float _FloSencondTime = 0F; //第二次点击时间
//手指停留时间
private float _FloStationaryTime = 0F; //手指停留的时间
void Start () {
//测试数值
_VecDeltaArea = Vector2.zero;
}
void Update (){
/* 手指离开屏幕 */
if (Input.touchCount == 1 && (Input.GetTouch(0).phase == TouchPhase.Ended)){
_VecDeltaArea = Vector2.zero;
_TxtDoubleClickTips.text = "";
_FloStationaryTime = 0;
_TxtFingerStationaryTips.text = "";
}
/* 识别手指滑屏 */
if (Input.touchCount == 1 && (Input.GetTouch(0).phase == TouchPhase.Moved)){
_VecDeltaArea.x += Input.GetTouch(0).deltaPosition.x;
_VecDeltaArea.y += Input.GetTouch(0).deltaPosition.y;
if (_VecDeltaArea.x > 100){
_TxtLeftRightTips.text = "右滑屏";
}
else if (_VecDeltaArea.x < -100){
_TxtLeftRightTips.text = "左滑屏";
}
if (_VecDeltaArea.y > 100){
_TxtUpDownTips.text = "上滑屏";
}
else if (_VecDeltaArea.y < -100){
_TxtUpDownTips.text = "下滑屏";
}
}
/* 手指双击识别(老方法)*/
if (Input.touchCount == 1 && (Input.GetTouch(0).phase == TouchPhase.Began)){
if (_BoolSecondClick){
_FloSencondTime = Time.time;
if (_FloSencondTime - _FloFirstTime > 0.02F && _FloSencondTime - _FloFirstTime < 0.3F){
_TxtDoubleClickTips.text = "发现双击!";
}
}
_BoolSecondClick = true;
_FloFirstTime = Time.time;
}
/* 手指双击测试(使用tapCount 属性)*/
if (Input.GetTouch(0).tapCount == 2){
_TxtDoubleClickTips.text = "发现双击!";
}
/* 手指停留识别 */
if(Input.touchCount==1 && Input.GetTouch(0).phase==TouchPhase.Stationary){
_FloStationaryTime += Input.GetTouch(0).deltaTime;
if (_FloStationaryTime>1F){
_TxtFingerStationaryTips.text = "发现停留";
}
}
}
}//Class_end
转之 :https://blog.csdn.net/xiaochenXIHUA/article/details/102579809.