一、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.