Unity 2017.04 安卓手势.

using System.Collections.Generic;
using System;
using UnityEngine;
namespace Hades.UI.Base
{
    public class FingerPosture : MonoBehaviour
    {
        public Action<int,Vector2> OnFingerDown;
        public Action<int, Vector2> OnFingerUp;
        public Action<int, Vector2,Vector2> OnFingerMove;
        Dictionary<int, Vector2> _fingerInfos = new Dictionary<int, Vector2>();
        List<int> _fingers = new List<int>();
        List<int> _curFingers = new List<int>();

        bool _mouseButtonDown = false;
        // Update is called once per frame
        void Update()
        {

#if UNITY_EDITOR
            //第一次按下.
            if (_mouseButtonDown == false && Input.GetMouseButtonDown(0))
            {
                _mouseButtonDown = true;
                _fingerInfos[1] = Input.mousePosition;
                OnFingerDown(1, Input.mousePosition);
            }
            else if (_mouseButtonDown && Input.GetMouseButton(0))
            {
                Vector2 pos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
                OnFingerMove(1, Input.mousePosition, pos - _fingerInfos[1]);
                _fingerInfos[1] = pos;

            }
            else if (Input.GetMouseButtonUp(0))
            {
                _mouseButtonDown = false;
                OnFingerUp(1, Input.mousePosition);
            }

#elif UNITY_IPHONE || UNITY_ANDROID
            _curFingers.Clear();
            if (Input.touchCount > 0)//有手指点击.
            {
                //遍历所有的手指.将新增的记录下来(onfingerdown).减少的删除(onfingerup).相同的.坐标不一致的发送移动(onfingermove)
                for (int i = 0; i < Input.touchCount; i++)
                {
                    Touch touch = Input.GetTouch(i);
                    _curFingers.Add(touch.fingerId);
                    if (_fingerInfos.ContainsKey(touch.fingerId))
                    {
                        float dis = Vector2.Distance(touch.position, _fingerInfos[touch.fingerId]);
                        if (dis > 0)
                        {
                            //手指id.点击在哪.移动了多少.
                            OnFingerMove(touch.fingerId, touch.position, touch.position - _fingerInfos[touch.fingerId]);
                        }
                        _fingerInfos[touch.fingerId] = touch.position;
                    }
                    else
                    {
                        _fingerInfos.Add(touch.fingerId, touch.position);
                        _fingers.Add(touch.fingerId);
                        //手指id,点击在哪里
                        OnFingerDown(touch.fingerId, touch.position);
                    }
                }
                for (int i = 0; i < _fingers.Count;)
                {
                    if (!_curFingers.Contains(_fingers[i]))
                    {
                        OnFingerUp(_fingers[i], _fingerInfos[_fingers[i]]);
                        _fingerInfos.Remove(_fingers[i]);
                        _fingers.Remove(_fingers[i]);
                        continue;
                    }
                    i++;
                }

            }
            else
            {
                for (int i = 0; i < _fingers.Count; i++)
                {
                    OnFingerUp(_fingers[i], _fingerInfos[_fingers[i]]);
                }
                //手指全部松开了.
                _fingerInfos.Clear();
                _fingers.Clear();
            }
              //检查哪个抬起了
#endif
        }

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值