Unity3dTouch触摸属性的使用方法
iOS和Android设备能够支持多点触控。在unity中你可以通过Input.touches属性集合访问在最近一帧中触摸在屏幕上的每一根手指的状态数据。简单的触控响应实现起很简单,不过一些复杂的触控响应或触控手势什么的,还是使用一些第三方的插件吧,当然你也可以自己封装。不管什么情况,了解决unity原生api还是非常必要的。
Input类中对触摸操作的方法和变量
方法和变量
说明
GetTouch
返回指定的触摸数据对象
Touches
当前所有触摸状态列表
touchCourt
当前所有触摸状态列表长度
multiTouchEnable
系统是否支持多点触摸
simulateMouseWithTouches
屏幕触控模拟鼠标的点击
touchSupported
返回应用程序正在运行的设备是否支持触摸输入
注意Input.touches返回的是Touch[],每个记录代表一个手指在屏幕上的触碰状态
Input.GetTouch (intindex )方法返回值是Touch,一个存放触摸信息的对象不允许分配临时变量。
通过GetTouch或者touches可以访问移动设备的触摸数据,数据保存在Touch的结构体中,结构体Touch的变量
变量
说明
Fingered
触摸数据的唯一索引id
Position
触摸的位置
deltaPosition
触摸位置的改变量
deltaTime
距离上次触摸数据变化的时间间隔
tapCount
单击次数
Phase
触摸的状态的描述
通过调用phase可以访问当前的触摸状态,
变量
说明
Began
手指刚触摸屏幕
Moved
手指在屏幕上移动
Stationary
手指触碰屏幕并从上一帧起没有移动
Ended
手指离开屏幕
Canceled
系统取消了跟踪触摸
TouchPhase枚举:它列表描述了手指触摸的几种状态。对应Touch类中的phase属性。这是状态分别是:Began、Move、Stationary、Ended、Canceled。
相关的api
1、Toch类:用来记录一个手指触摸在屏幕上的状态与位置的各种相关数据。这其它中只有两个属性是你要注意的,就是Touch.fingerId和Touch.tapCount。
Touch.fingerId:一个Touch的标识。Input.touches数组中的同一个索引在两帧之前,指向的可不一定是同一个Touch。用来标识某个具体的touch一定要用fingerId,在分析手势时、或处理多点触控时,fingerId是非常重要的。
Touch.tapCount:点击的总人数,这个属性可以用来模拟“双击”的效果。
2、TouchPhase枚举:它列表描述了手指触摸的几种状态。对应Touch类中的phase属性。这是状态分别是:Began、Move、Stationary、Ended、Canceled。
3、Input.touches:一个Touch数组,代表着当前帧,所有手指在屏幕上的触碰状态与相关数据。(只读
4、Input.touchCount:触摸数量,相当于Input.touches.Length。(只读)
5、Input.multiTouchEnabled:设置与指示当前系统(注意不是指设备哦!)是否启用多点触控。不过这个属性有点怪,我在电脑上测试给它赋false不会报错但完全是没有用的,它的值一值是true.不过在我的安卓手机上测试是正常的!Ture表示支持多点触控(一般是5点);False表示单点触控。
6、Input.GetTouch(int index):安索引值获取一个Touch对象。
官方例子根据手指在屏幕上移动来移动物体
usingUnityEngine;
usingSystem.Collections;
public class ExampleClass :MonoBehaviour
{
public float speed = 0.1F;
void Update()
{
if (Input.touchCount> 0 &&Input.GetTouch(0).phase ==TouchPhase.Moved)
{
// Get movement of the finger since lastframe
Vector2touchDeltaPosition =Input.GetTouch(0).deltaPosition;
// Move object across XY plane
transform.Translate(-touchDeltaPosition.x * speed,-touchDeltaPosition.y * speed, 0);
}
}
}