You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity3D中如何获取滑动操作的角度?

Unity3D 获取滑动角度并判断滑动方向

先修正变量赋值错误

你当前代码里的起始点和终点赋值搞反了:按下鼠标时应该记录滑动起始点,抬起时记录终点,否则计算的方向向量会完全反向。修正后的Update函数如下:

private Vector2 fingerDown;
private Vector2 fingerUp;
public float SwipeThreshold = 50f; // 可自定义的滑动最小距离阈值
public UnityEvent onSwipeUp;
public UnityEvent onSwipeDown;
public UnityEvent onSwipeLeft;
public UnityEvent onSwipeRight;

private void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        fingerDown = Input.mousePosition;
        fingerUp = fingerDown;
    }
    if (Input.GetMouseButtonUp(0))
    {
        fingerUp = Input.mousePosition;
        CheckSwipe();
    }
}

计算滑动角度的正确方法

使用Mathf.Atan2计算方向向量的弧度值,再转换为角度,同时将负角度转换为0-360°的范围,适配你的方向判断逻辑:

private void CheckSwipe()
{
    Vector2 direction = fingerUp - fingerDown;
    
    // 过滤短距离操作,避免误判
    if (direction.magnitude < SwipeThreshold)
    {
        return;
    }
    
    // 计算角度:将弧度转为角度,并修正为0-360°范围
    float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
    if (angle < 0)
    {
        angle += 360;
    }
    
    // 修正方向判断区间(原区间逻辑有误,已调整)
    if (angle >= 45 && angle < 135)
    {
        onSwipeUp?.Invoke();
    }
    else if (angle >= 135 && angle < 225)
    {
        onSwipeLeft?.Invoke();
    }
    else if (angle >= 225 && angle < 315)
    {
        onSwipeDown?.Invoke();
    }
    else // 0°-45° 或 315°-360°
    {
        onSwipeRight?.Invoke();
    }
}

关键说明

  1. 变量命名:改用驼峰式命名(fingerUp/fingerDown)符合C#编码规范,避免歧义。
  2. 空引用防护:使用?.Invoke()替代直接Invoke(),防止事件未绑定时抛出空引用异常。
  3. 角度逻辑:Mathf.Atan2(direction.y, direction.x)以屏幕右方向为0°,顺时针递增,因此对应的方向区间需要匹配这个规则(原代码中135-225°的方向判断错误,已修正为向左)。

内容的提问来源于stack exchange,提问作者njnjnj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 20:18:35