C# Unity 事件——读取额外的鼠标按钮

C# Unity Event -- Reading Additional Mouse Buttons

我正在通过 Event.current.keyCodeEvent.current.button 确定 KeyCode 个输入。

Event.current.isMouse == true, Event.current.button只会return 0,1, or 2 (left, right, or middle click).

它从不识别 Mouse3 或 4 按钮。

有人知道这方面的信息吗?

这可能是事件 class 的错误或限制。您可以使用 Unity 的输入 class 访问这些按钮。这有点误导,因为您是通过 GetKeyDown 而不是 GetMouseButtonDown 执行此操作的。

public class ButtonTest : MonoBehaviour
{
    private void Update()
    {
        if (UnityEngine.Input.GetKeyDown(KeyCode.Mouse0))
        {
            Debug.Log("Mouse 0");
        }
        if (UnityEngine.Input.GetKeyDown(KeyCode.Mouse1))
        {
            Debug.Log("Mouse 1");
        }
        if (UnityEngine.Input.GetKeyDown(KeyCode.Mouse2))
        {
            Debug.Log("Mouse 2");
        }
        if (UnityEngine.Input.GetKeyDown(KeyCode.Mouse3))
        {
            Debug.Log("Mouse 3");
        }
        if (UnityEngine.Input.GetKeyDown(KeyCode.Mouse4))
        {
            Debug.Log("Mouse 4");
        }
        if (UnityEngine.Input.GetKeyDown(KeyCode.Mouse5))
        {
            Debug.Log("Mouse 5");
        }
        if (UnityEngine.Input.GetKeyDown(KeyCode.Mouse6))
        {
            Debug.Log("Mouse 6");
        }
    }
}

我运行遇到了同样的问题。 Unity 脚本 API 上给出的示例代码暗示可以通过 Event.button 访问其他鼠标按钮,但是我无法找到访问它们的方法。

using UnityEngine;

public class Example : MonoBehaviour
{
    // Detect which mouse button is currently pressed
    // and print it.
    void OnGUI()
    {
        Event e = Event.current;
        if (e.button == 0 && e.isMouse)
        {
            Debug.Log("Left Click");
        }
        else if (e.button == 1)
        {
            Debug.Log("Right Click");
        }
        else if (e.button == 2)
        {
            Debug.Log("Middle Click");
        }
        else if (e.button > 2)
        {
            Debug.Log("Another button in the mouse clicked");
        }
    }
}

如果您出于键配置目的检查所有可能的鼠标键,那么您可以这样做,因为鼠标键代码彼此相邻:

private void OnGUI()
{
 
  KeyCode key;
  for (int i = (int)KeyCode.Mouse0; i <= (int)KeyCode.Mouse6; i++)
  {
    if (Input.GetKey((KeyCode)i))
    {
       key = (KeyCode)i;
       break;
    }
  } 
  //do something with the key here
 
}

这样就不用写出7个if语句,找到关键代码就跳出循环