liu784855 2023-07-20 11:51 采纳率: 0%
浏览 56
已结题

unity inputsystem 关于运行时重新绑定快捷键

想要实现一个快捷键自定义功能,遇到了一个问题。

img

如何再运行时,修改上图中复制模式的快捷键,这涉及到一个binding类型的变化,官方文档中提供的API只支持相同类型的重新绑定。

目前我还没找到文档中关于将binding类型重新绑定为Composite类型的方法。

操作环境:PC; Keyboard(键盘)
inputSystem版本:1.5.0

本人愿意为知识付费,请各位同学不要担心。有回必应哦。

令附已知的知识点:
1.首先 相同类型的重新绑定 官方插件就有完整的demo 此类回答就不会被采纳了。
2.ApplyBindingOverride 这个API也不行。
3.如果是建议自己写一套实现的话这个我考虑过,两个原因 一个是需要一定的时间成本 二是后续插件迭代维护需要频繁修改很麻烦。

  • 写回答

5条回答 默认 最新

  • CSDN专家-sinJack 2023-07-26 14:45
    关注

    在Unity Input System中,运行时重新绑定快捷键可以通过以下步骤实现:

    1. 获取当前的InputActionMap:使用InputActionAsset.FindActionMap方法获取包含要修改的快捷键的InputActionMap对象。

    2. 获取要修改的InputAction:使用InputActionMap.FindAction方法获取要修改的具体InputAction对象。

    3. 移除旧的Binding:使用InputAction.RemoveBinding方法移除当前绑定的快捷键。

    4. 创建新的Composite Binding:使用InputBindingComposite.Create方法创建一个新的Composite类型的绑定。

    5. 添加新的Binding:使用InputAction.AddBinding方法将新创建的Composite绑定添加到输入动作中。

    下面是一个示例代码片段,演示了如何将复制模式(Copy Mode)的快捷键重新绑定为Composite类型:

    using UnityEngine;
    using UnityEngine.InputSystem;
    
    public class ShortcutRebinding : MonoBehaviour
    {
        public InputActionAsset inputActions; // 引用你创建好的 Input Action Asset
    
        private void Start()
        {
            // 获取 Input Action Map
            var actionMap = inputActions.FindActionMap("YourActionMapName");
    
            // 获取要修改的 Input Action
            var action = actionMap.FindAction("YourCopyModeActionName");
    
            // 移除旧 Binding
            action.RemoveBinding("<your_old_binding>");
    
            // 创建新 Composite Binding
            var composite = InputBindingComposite.Create("<your_composite_type>");
            
            // 添加新 Binding
            action.AddBinding(composite);
        }
    }
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月26日
  • 修改了问题 7月20日
  • 修改了问题 7月20日
  • 赞助了问题酬金15元 7月20日
  • 展开全部

悬赏问题

  • ¥15 webstorm上开发的vue3+vite5+typeScript打包时报错
  • ¥15 vue使用gojs,需求在link中的虚线上添加方向箭头
  • ¥15 CSS通配符清除内外边距为什么可以覆盖默认样式?
  • ¥15 SPSS分类模型实训题步骤
  • ¥15 求解决扩散模型代码问题
  • ¥15 工创大赛太阳能电动车项目零基础要学什么
  • ¥20 limma多组间分析最终p值只有一个
  • ¥15 nopCommerce开发问题
  • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
  • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决