关于移动设备几种屏幕输入方式的小结
移动设备和的输入和电脑端的输入有一定的差别,移动设备的输入并没有电脑输入那么灵活,但是移动屏幕的
触屏缺给了我们针对一些事件的处理方式,在此小结了几种常见的移动输入的种类,同时也作为学习的一个进度的一个
小结。
using UnityEngine; using System.Collections; using System.Collections.Generic; public class InputEventMangner : MonoBehaviour { public delegate bool InputManager(); public static event InputManager OnSlider; public static event InputManager OnClick; public static event InputManager OnDoubleClick; public static event InputManager OnStayTouch; public static event InputManager OnScaleTouch; //定义的变量 Vector2 vecDeltaArea;//滑动的区域 float StayTime;//手指停留时间 bool isSecondTouch; float firstTouchTime = 0f; float secondTouchTime = 0f; // 处理缩放的变量 Vector2 firstFinger = Vector2.zero; Vector2 secendFinger = Vector2.zero; float DistanceTwoFinger = 0f; List<float> DistanceTwoFingerList; void Start() { vecDeltaArea = Vector2.zero; StayTime = 0f; isSecondTouch = false; DistanceTwoFingerList = new List<float>(); } void OnEnable() { //事件注册 OnSlider += Slider; OnClick += Click; OnDoubleClick += DoubleClick; OnStayTouch += StayTouch; OnScaleTouch += ScaleTouch; } void OnDisable() { //事件的取消 OnSlider -= Slider; OnClick -= Click; OnDoubleClick -= DoubleClick; OnStayTouch -= StayTouch; OnScaleTouch -= ScaleTouch; } //用到Update函数来检测事件的触发 void Update() { //检测手指滑动 if(Input.touchCount==1&&(Input.GetTouch(0).phase==TouchPhase.Moved)) { if(OnSlider!=null) { OnSlider(); } vecDeltaArea.x += Input.GetTouch(0).deltaPosition.x; vecDeltaArea.y += Input.GetTouch(0).deltaPosition.y; if(vecDeltaArea.x>100) { //左滑动 } else if(vecDeltaArea.x<-100) { //右滑动 } if(vecDeltaArea.y>100) { //上滑动 } else if(vecDeltaArea.y<-100) { //下滑动 } } //双击操作||这里有两种方法, //方法一: if (Input.GetTouch(0).tapCount == 2) { if (OnDoubleClick != null) { OnDoubleClick(); } } //方法二: if(Input.touchCount==1&&(Input.GetTouch(0).phase==TouchPhase.Began)) { if(isSecondTouch) { secondTouchTime = Time.time; if(secondTouchTime-firstTouchTime>0.02f&&secondTouchTime-firstTouchTime<0.3f) { //发现双击事件 } } isSecondTouch = true; firstTouchTime = Time.time; } //检测停留识别 if(Input.touchCount==1&&(Input.GetTouch(0).phase==TouchPhase.Stationary)) { StayTime += Input.GetTouch(0).deltaTime; if(StayTime>1&&OnStayTouch!=null) { //发现停留 } } //检测双手指的缩放操作 if(Input.touchCount==2&&(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved)) { if(OnScaleTouch!=null) { firstFinger = Input.GetTouch(0).position; secendFinger = Input.GetTouch(1).position; DistanceTwoFinger = Vector2.Distance(firstFinger,secendFinger); DistanceTwoFingerList.Add(DistanceTwoFinger); // if(DistanceTwoFingerList.Count>=10) { if(DistanceTwoFingerList[0]>DistanceTwoFingerList[9]) { //缩小的操作 } else { //放大的操作 } DistanceTwoFingerList.Clear(); } } } } //当手指在屏幕滑动的时候 bool Slider() { //定义一个变量储存bool bool IsSlider = false; //要触发的操作,将值值为true IsSlider = true; return IsSlider; } //当手指单击操作的时候 bool Click() { bool isClick = false; //触发的操作 isClick = true; return isClick; } //当手指双击的时候 bool DoubleClick() { bool isDoubleClick = false; //触发的操作 isDoubleClick = true; return isDoubleClick; } //当手指停留在屏幕上的时候 bool StayTouch() { bool isStayTouch = false; //触发了操作 isStayTouch = true; return isStayTouch; } //当手指缩放的时候 bool ScaleTouch() { bool isScaleTouch = false; //触发了操作 isScaleTouch = true; return isScaleTouch; } }
以上便是我此次小结的全部内容,希望以后能不断学习,有一个系统的完善