Unity InputSystem中RebindOperation无法修改绑定路径问题求助
解决InputAction按键重绑定后路径未更新的问题
你的代码中OnComplete事件能触发,但绑定路径未发生变化,核心原因通常是重绑定的修改未被持久化到InputActionAsset,或是缺少关键配置步骤。以下是具体排查和修复方案:
1. 补充绑定修改的持久化逻辑
默认情况下,PerformInteractiveRebinding仅临时修改内存中的绑定,需在完成回调中明确应用并保存修改。修改你的ChangeShortcut方法:
public void ChangeShortcut(InputAction action, int bindingIndex) { rebindOperation?.Cancel(); action.Disable(); rebindOperation = action.PerformInteractiveRebinding(bindingIndex) // 允许覆盖已有绑定(按需开启) .WithRebindOverrideHandling(RebindOverrideHandling.Overwrite) .OnComplete(operation => { // 获取新绑定路径并应用到目标绑定 var newPath = operation.selectedControl.path; action.ApplyBindingOverride(bindingIndex, newPath); // 若Action来自InputActionAsset,保存修改到配置文件 var actionAsset = action.actionMap?.asset; actionAsset?.SaveChanges(); CleanUp(action); }) .OnCancel(operation => CleanUp(action)); rebindOperation.Start(); } private void CleanUp(InputAction action) { action.Enable(); rebindOperation?.Dispose(); rebindOperation = null; }
2. 验证绑定索引的有效性
确认传入的bindingIndex是目标Action的正确绑定索引。可通过以下代码打印所有绑定信息,核对索引与对应路径:
foreach (var binding in action.bindings) { Debug.Log($"绑定索引 {binding.index}: 路径 {binding.path}"); }
若索引错误,重绑定操作会作用于无关绑定,导致目标绑定无变化。
3. 检查控制组匹配性
你的输入配置中绑定的groups为Computer,需确保当前激活的控制组包含该分组:
// 激活Computer控制组 InputSystem.SetEnabledControlSchemes("Computer");
若当前激活组与绑定组不匹配,重绑定的修改可能无法在当前上下文生效。
4. 确认Action实例来源
如果InputAction是代码直接创建的(而非来自InputActionAsset),无需调用SaveChanges(),但需确保后续使用的是同一个Action实例;若来自配置资产,必须调用SaveChanges()才能将修改持久化到配置文件。
内容的提问来源于stack exchange,提问作者IGoogleBeforeAsking
相关产品推荐
相关产品推荐

