我遇到了处理InputSystem中的点击输入的困难。如今,点击事件每次点击都会触发两次,据我推测这是因为在鼠标按钮按下期间我获得了两个帧。然而,这在下游引起了一些问题。 
 我有一个名为“Click”的动作设置为Pass Through/Button映射到左鼠标。GameInput类中监听动作事件,并触发一个C#事件使另一个类订阅。 
 我知道.performed每次输入激活时都会触发帧,这并不是理想的选择,但当使用.started或.cancelled时我不会得到任何响应。查找这个问题并不是特别有帮助,因为大多数示例似乎只是给我已经有的内容。 
 那些人是如何处理这个问题的呢?

public class GameInput : MonoBehaviour
{
    public static GameInput Instance;
    public static event Action OnClick;
    private PlayerInputActions _playerInputActions;
    private void Awake()
    {
        if (Instance == null)
        {
            Instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
            return;
        }
        _playerInputActions = new PlayerInputActions();
        _playerInputActions.Camera.Enable();
        _playerInputActions.Player.Enable();
        _playerInputActions.Player.Click.performed += Click;
    }
    public Vector2 GetMovementVectorNormalized() => _playerInputActions.Camera.Move.ReadValue<Vector2>().normalized;
    private static void Click(InputAction.CallbackContext _) => OnClick?.Invoke();
}
public class GameInput : MonoBehaviour
{
    public static GameInput Instance;
    public static event Action OnClick;
    private PlayerInputActions _playerInputActions;
    private void Awake()
    {
        if (Instance == null)
        {
            Instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
            return;
        }
        _playerInputActions = new PlayerInputActions();
        _playerInputActions.Camera.Enable();
        _playerInputActions.Player.Enable();
        _playerInputActions.Player.Click.performed += Click;
        _playerInputActions.Player.Click.started += Click;
        _playerInputActions.Player.Click.canceled += Click;
    }
    public Vector2 GetMovementVectorNormalized() => _playerInputActions.Camera.Move.ReadValue<Vector2>().normalized;
    private static void Click(InputAction.CallbackContext _)
    {
        if (_action == InputActionControlType.Button)
        {
            OnClick?.Invoke();
        }
    }
}
public class GameInput : MonoBehaviour
{
    public static GameInput Instance;
    public static event Action OnClick;
    private PlayerInputActions _playerInputActions;
    private void Awake()
    {
        if (Instance == null)
        {
            Instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
            return;
        }
        _playerInputActions = new PlayerInputActions();
        _playerInputActions.Camera.Enable();
        _playerInputActions.Player.Enable();
        _playerInputActions.Player.Click.performed += Click;
    }
    public Vector2 GetMovementVectorNormalized() => _playerInputActions.Camera.Move.ReadValue<Vector2>().normalized;
    private static void Click(InputAction.CallbackContext _)
    {
        if (_readValueControl.controlType == ControlType.Button)
        {
            OnClick?.Invoke();
        }
    }
}