Unity:技巧:想实现鼠标或触摸是否左右拖拽

目录

一.目的

1.想实现鼠标或触摸是否左右拖拽。

2.上网搜索,没有找到合适的,所以自己总结一下。

二.参考

三.注意

四.操作:1:成功

1.运行结果:成功:


一.目的

1.想实现鼠标或触摸是否左右拖拽。

2.上网搜索,没有找到合适的,所以自己总结一下。

二.参考

三.注意

四.操作:1:成功

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值