Unity新输入系统如何在Attack_performed回调获取鼠标按钮枚举
实现方案
- 先做前置类型校验:判断当前触发动作的控件是否为鼠标按钮控件,避免非鼠标输入(如键盘、手柄按键)触发动作时出现逻辑异常
- 不建议直接硬解析控件路径字符串做匹配,通过控件实例和当前鼠标设备的内置属性做比对,稳定性远高于字符串匹配,不会因为输入系统版本更新调整路径命名格式就失效
完整代码示例
void Start() { Actions.Player.Attack.performed += Attack_performed; } private void Attack_performed(InputAction.CallbackContext obj) { // 前置校验:确认触发来源为鼠标按钮控件 if (obj.control is not MouseButtonControl matchedMouseBtn) { return; } var currentMouse = Mouse.current; MouseButton targetButton; // 逐一枚举比对控件实例,映射为官方MouseButton枚举 if (matchedMouseBtn == currentMouse.leftButton) { targetButton = MouseButton.Left; } else if (matchedMouseBtn == currentMouse.rightButton) { targetButton = MouseButton.Right; } else if (matchedMouseBtn == currentMouse.middleButton) { targetButton = MouseButton.Middle; } else { // 若需支持侧键等其他鼠标按键,可在此扩展匹配逻辑 return; } // 后续可直接使用targetButton枚举执行业务逻辑 print($"本次攻击触发对应的鼠标按钮:{targetButton}"); }
注意事项
- 该方法完全规避了手动解析路径字符串的兼容问题,和直接打印控件得到的路径字符串相比,实例比对的方式没有格式歧义
- 若当前Attack动作同时绑定了多类输入设备的按键,前置的类型判断会自动过滤非鼠标的触发来源,不会出现类型转换报错
内容的提问来源于stack exchange,提问作者IAmNotARobot
相关产品推荐
相关产品推荐

