Unity新输入系统运行时修改InputAction的interactions属性方法咨询
解决方法
你的实现思路是合理的,使用Unity新输入系统内置的Hold交互可以避免自行统计按键时长的各类边界问题(比如窗口失焦、输入事件丢失导致的计时错误等)。运行时修改InputAction的交互是完全可以实现的,你遇到的只读报错是因为官方没有开放interactions字段的直接赋值权限,需要通过内置的绑定重载API操作,具体步骤如下:
具体实现步骤
- 首先禁用需要修改的InputAction:运行时处于启用状态的InputAction修改配置不会生效,必须先禁用
- 调用
ApplyBindingOverride方法传入新的交互配置 - 重新启用InputAction,配置即可生效
完整代码示例
public void AdjustShootHoldDuration(float duration) { // 禁用射击动作 controls.Main.Shoot.Disable(); // 仅重载交互配置,保留原有按键绑定 controls.Main.Shoot.ApplyBindingOverride(new InputBinding { interactions = $"Hold(duration={duration})" }); // 重新启用动作,新的Hold时长立即生效 controls.Main.Shoot.Enable(); }
注意事项
- 如果需要同时保留多个交互(比如同时支持点击射击和长按蓄力),可以用逗号拼接交互配置,示例:
interactions = $"Press, Hold(duration={duration})" - 如果你的InputAction绑定了多个输入路径(比如同时支持键鼠左键、手柄扳机键),可以通过指定绑定索引或路径单独修改某一设备的交互,无需全局覆盖
- 不推荐使用反射修改interactions字段,不仅会破坏输入系统的内部状态管理,还可能在版本更新后出现兼容问题
内容的提问来源于stack exchange,提问作者Mathias
相关产品推荐
相关产品推荐

