我遇到了处理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();
}
}
}
评论 (0)