You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 05:54:09