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

Unity Input System下仅移动鼠标触发Scroll Rect滚动如何修复?

问题成因

该问题是Unity 2019.1.0f2搭配Input System 1.0.2版本的已知兼容性问题,核心原因有三点:

  1. 部分支持手势操作的触控板、高精度鼠标,或者Windows系统下的指针设备,会在鼠标移动时误将极微小的位移量上报为滚轮滚动增量,这类误上报的数值通常非常小。
  2. Input System 1.0.2版本未给滚动输入配置默认死区,所有上报的数值无论大小都会被Mouse.current.scroll.ReadValue()直接返回。
  3. 该版本对文档中提及的「部分设备将悬停在可滚动区域的指针位移映射为滚动输入」的特性没有做特殊过滤,直接将这类输入合并到了滚动值中,就会出现鼠标仅移动、滚轮未滚动也触发Scroll Rect滚动的现象。
规避方案
  • 优先升级Input System版本:该问题在Input System 1.1.0及后续版本已经被官方修复,官方新增了默认的滚动输入死区,同时优化了多设备的输入映射逻辑,适配成本最低。如果你的项目允许升级依赖包,这是最推荐的方案。
  • 手动添加死区过滤:如果受项目兼容性限制无法升级Input System版本,可以在读取滚动输入时手动添加阈值判断,仅当滚动值的模长超过设定的合理阈值(通常建议设为0.1~0.2,可根据实际调试调整)时,才判定为有效滚动输入,代码示例如下:
using UnityEngine;
using UnityEngine.InputSystem;

public class TestScroll : MonoBehaviour
{
    // 滚动死区阈值,可根据实际使用的设备调试调整
    public float scrollDeadZoneThreshold = 0.1f;

    void Update()
    {
        Vector2 scrollValue = Mouse.current.scroll.ReadValue();
        if (scrollValue.magnitude > scrollDeadZoneThreshold)
        {
            // 此处写有效滚动对应的业务逻辑
            Debug.Log(scrollValue);
        }
    }
}
  • 全局配置输入死区:打开Edit > Project Settings > Input System Package设置页,找到Mouse设备对应的Scroll输入项,为其添加Dead Zone处理器并设置合理阈值,该配置全局生效,无需在每个读取滚动输入的脚本中单独加判断。
  • 自定义Scroll Rect逻辑:如果仅需要修复Scroll Rect的误触发问题,可以继承Scroll Rect重写OnScroll方法,在方法中添加死区判断,只有输入的滚动值超过阈值时再调用基类的滚动逻辑即可。

内容的提问来源于stack exchange,提问作者Геннадий Машуков

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:36:05