关于移动设备几种屏幕输入方式的小结

  移动设备和的输入和电脑端的输入有一定的差别,移动设备的输入并没有电脑输入那么灵活,但是移动屏幕的

触屏缺给了我们针对一些事件的处理方式,在此小结了几种常见的移动输入的种类,同时也作为学习的一个进度的一个

小结。

 

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;
    }
}

 

 

  以上便是我此次小结的全部内容,希望以后能不断学习,有一个系统的完善

posted @ 2016-10-19 21:39  Recho  阅读(574)  评论(0编辑  收藏  举报