目录
一.目的
1.想实现鼠标或触摸是否左右拖拽。
2.上网搜索,没有找到合适的,所以自己总结一下。
二.参考
三.注意
四.操作:1:成功
1.运行结果:成功:
- 界面1是罗盘,界面2、3视频是一样的,所以不是卡住了,是正常切换了界面。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 判断手指向左还是向右拖拽
/// </summary>
public class MyDrag : MonoBehaviour
{
public static MyDrag instance;
/// <summary> Vector2:鼠标当前位置</summary>
private Vector2 vec2_mouseScreen_cur;
/// <summary> Vector2:鼠标上次位置</summary>
private Vector2 vec2_mouseScreen_last;
/// <summary> float:拖动多少距离执行动作</summary>
[Tooltip("float:拖动多少距离执行动作")]
[Header("float:拖动多少距离执行动作")]
// [Range(0,1000)]
private float fDistanceCanSwitch=30;
/// <summary> bool:是否能拖拽</summary>
bool bIsCanDrag;
/// <summary> float:间隔多久后可以继续滑动</summary>
[Tooltip("float:间隔多久后可以继续滑动")]
[Header("float:间隔多久后可以继续滑动")]
[Range(0,10f)]
private float fIntervalCanDrag=0.5f;
/// <summary> bool:协程是否开始</summary>
bool bIsStart_IE_canDrag;
void Awake()
{
instance = this;
}
void Start()
{
vec2_mouseScreen_last = vec2_mouseScreen_cur;
bIsCanDrag = true;
bIsStart_IE_canDrag = false;
}
private void Update()
{
//间隔一段时间后,才可以继续执行拖拽
if (bIsCanDrag==false&&bIsStart_IE_canDrag==false)
{
StartCoroutine("IE_canDrag");
bIsStart_IE_canDrag = true;
}
if (Input.GetMouseButtonDown(0))
{
vec2_mouseScreen_cur = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
vec2_mouseScreen_last = vec2_mouseScreen_cur;
}
if (Input.GetMouseButton(0))
{
//存储鼠标的屏幕空间坐标(Z值使用目标物体的屏幕空间坐标)
vec2_mouseScreen_cur = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
//Debug.Log("vec2_mouseScreen_cur:"+ vec2_mouseScreen_cur);
//判断是否拖拽
float fDistance_x = Mathf.Abs(vec2_mouseScreen_cur.x - vec2_mouseScreen_last.x);
if (fDistance_x > fDistanceCanSwitch)
{
if (bIsCanDrag==true)
{
//向左还是向右
float x = vec2_mouseScreen_cur.x - vec2_mouseScreen_last.x;
if (x > 0)
{
//Debug.Log("向右");
//拖拽后执行的动作
MyButtonSwitchCanvas.instance.OnClick_btn_lastOrNext(false);
}
else
{
//Debug.Log("向左");
//拖拽后执行的动作
MyButtonSwitchCanvas.instance.OnClick_btn_lastOrNext(true);
}
bIsCanDrag = false;
}
}
vec2_mouseScreen_last = vec2_mouseScreen_cur;
}
}
IEnumerator IE_canDrag()
{
//Debug.Log("fIntervalCanDrag:"+ fIntervalCanDrag);
yield return new WaitForSeconds(fIntervalCanDrag);
if (!bIsCanDrag)
{
bIsCanDrag = true;
bIsStart_IE_canDrag = false;
}
}
}