Unity Input System清空Input Action绑定出现异常如何处理?
报错原因
InvalidOperationException报错是因为action.bindings为ReadOnlyArray只读类型,你在循环中边遍历边删除索引0的绑定,会实时修改Input Action内部的绑定结构,导致只读数组的索引对应状态失效,最终抛出异常。
正确清空绑定的方法
方法1:调用原生API(最推荐)
Unity Input System原生提供了清空所有绑定的接口,直接一行代码即可完成,无额外兼容问题:
action.RemoveAllBindings();
方法2:赋值空绑定数组
直接给Action的bindings属性赋值空的绑定数组,实现全量覆盖清空:
action.bindings = System.Array.Empty<UnityEngine.InputSystem.InputBinding>();
方法3:先存绑定数量再倒序删除
如果需要自定义遍历删除逻辑,可以先拿到绑定的总数量,倒序遍历删除,避免索引错乱:
int bindingCount = action.bindings.Count; for (int i = bindingCount - 1; i >= 0; i--) { action.ChangeBinding(i).Erase(); }
注意事项
- 清空绑定操作尽量不要在输入事件触发的回调中执行,避免操作时Action处于占用状态导致异常
- 清空完成后如果需要继续使用该Action,建议调用
action.Enable()重新激活,确保修改生效
内容的提问来源于stack exchange,提问作者user12496888
相关产品推荐
相关产品推荐

