【问题标题】:Detect Mouse Wheel Scrolling Input with Unity`s new Input System使用 Unity 的新输入系统检测鼠标滚轮滚动输入
【发布时间】:2021-03-09 08:32:19
【问题描述】:

我目前正在尝试检测我目前在 Unity 引擎中进行的 2D 游戏的鼠标滚轮滚动输入。

我正在使用新的输入系统,但我目前被以下代码卡住了。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem.Controls;

public class ZoomController : MonoBehaviour
{

private PlayerControls playerControls;

private void Awake()
{
    playerControls = new PlayerControls();
}


private void OnEnable()
{
    playerControls.Enable();
}

private void OnDisable()
{
    playerControls.Disable();
}

void Start()
{
    
}

void Update()
{

    if (playerControls.Land.Zoom.ReadValue<Vector2>().y >= 1)
    {
        Debug.Log("Scroll 1");
    } else if (playerControls.Land.Zoom.ReadValue<Vector2>().y <= -1)
    {
        Debug.Log("Scroll 2");
    }
    
 }
}

如果我运行代码没有任何反应,我不知道为什么。

【问题讨论】:

    标签: c# unity3d input user-input mousewheel


    【解决方案1】:

    如果您将滚轮视为“一维轴”,您需要告诉 Unity 哪一侧(向上或向下)应该获胜。否则,您只会收到一个始终为 0 的平均值。

    另一个更好的选择是让值通过并添加“绑定”。

    请注意,在大多数系统上默认滚动值为 120,但在 Linux 上似乎为 1。因此,我建议简单地检查该值是大于还是小于 0 来确定它是向上还是向下滚动。

    float z = zoom.ReadValue<float>();
    if (z > 0)
        Debug.Log("Scroll UP");
    else if (z < 0)
        Debug.Log("Scroll DOWN");
    

    【讨论】:

    • 我尝试了你的方法并打印出我从 playerControls.Land.Zoom.ReadValue().y 获得的值。它给我一个错误:InvalidOperationException:无法从控件'/Mouse/scroll/y'中读取类型'Vector2'的值绑定到动作'Land/Zoom[/Mouse/scroll/y]'(控件是'AxisControl'值类型'float')
    • 它打印 0,如果我尝试滚动它会抛出错误。
    • 请注意,鼠标滚轮是二维矢量,但 y 方向和 x 方向一样是浮点数。如果您想同时读取两个值(作为 Vector2),您必须将操作定义为“2D 矢量”。
    • 你描述为“更好”的选项对我来说效果很好:)
    【解决方案2】:

    单独使用代码你可以做到这一点:

    
        Vector2 vec = Mouse.current.scroll.ReadValue();
        scroll = vec.y
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      相关资源
      最近更新 更多