Unity3d 触屏手机滑动事件(上下左右方向精确判断)

本文介绍了一个使用Unity实现的滑动方向检测系统。该系统能够识别用户在屏幕上进行的上、下、左、右四个方向的滑动,并可根据设置决定是否支持连续多次滑动操作。文章提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using UnityEngine;

namespace ui
{
    public class SlidingDirectionTest : MonoBehaviour
    {
        enum SlideVector
        {
            None,
            Up,
            Down,
            Left,
            Right
        };

        [SerializeField] private bool executeMultipleTimes = false; //是否支持多次执行
        [SerializeField] private float offsetTime = 0.1f; //判断的时间间隔 
        [SerializeField] private float slidingDistance = 80f; //滑动的最小距离

        private Vector2 touchFirst = Vector2.zero; //手指开始按下的位置

        private Vector2 touchSecond = Vector2.zero; //手指拖动的位置

        private SlideVector currentVector = SlideVector.None; //当前滑动方向

        private float timer; //时间计数器  

        void OnGUI()
        {
            if (Event.current.type == EventType.MouseDown)
            {
                touchFirst = Event.current.mousePosition;
            }

            if (Event.current.type == EventType.MouseDrag)
            {
                touchSecond = Event.current.mousePosition;

                timer += Time.deltaTime;

                if (timer > offsetTime)
                {
                    touchSecond = Event.current.mousePosition;
                    Vector2 slideDirection = touchFirst - touchSecond;
                    float x = slideDirection.x;
                    float y = slideDirection.y;

                    if (y + slidingDistance < x && y > -x - slidingDistance)
                    {
                        if (!executeMultipleTimes && currentVector == SlideVector.Left)
                        {
                            return;
                        }

                        Debug.Log("left");

                        currentVector = SlideVector.Left;
                    }
                    else if (y > x + slidingDistance && y < -x - slidingDistance)
                    {
                        if (!executeMultipleTimes && currentVector == SlideVector.Right)
                        {
                            // todo 看你是否需要多次执行 return是每次滑动仅执行一次
                            return;
                        }

                        Debug.Log("right");

                        currentVector = SlideVector.Right;
                    }
                    else if (y > x + slidingDistance && y - slidingDistance > -x)
                    {
                        if (!executeMultipleTimes && currentVector == SlideVector.Up)
                        {
                            return;
                        }

                        Debug.Log("up");

                        currentVector = SlideVector.Up;
                    }
                    else if (y + slidingDistance < x && y < -x - slidingDistance)
                    {
                        if (!executeMultipleTimes && currentVector == SlideVector.Down)
                        {
                            return;
                        }

                        Debug.Log("Down");

                        currentVector = SlideVector.Down;
                    }

                    timer = 0;
                    touchFirst = touchSecond;
                }
            }

            if (Event.current.type == EventType.MouseUp)
            {
                currentVector = SlideVector.None; //初始化方向  
            }
        }
    }
}

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值