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
}
}
}
Unity 2017.04 安卓手势.
最新推荐文章于 2023-07-09 16:04:34 发布