【unity小技巧】新输入系统InputSystem重新绑定控制按键(最全最完美解决方案)

news2024/12/23 18:17:34

文章目录

  • 前言
  • 安装InputSystem,并导入重新绑定控制按键例子
  • 输入控制
  • 拿例子的重绑定按钮预制体
  • 绑定对应按钮
  • 升级文本
  • 新增全屏覆盖的提示文本
  • 配置绑定
  • 绑定当前启用的输入键
  • 禁用一些按钮的绑定和退出按键绑定状态
  • 重复绑定按钮问题
  • 重置绑定重复按钮
  • 修改按钮绑定名字
    • 添加两个变量
    • 勾选第一个为真才显示输入文本
    • 修改实际生效
  • 绑定图标
  • 这里演示绑定Xbox图标
  • 重置所有按钮
  • 保存和加载我们的按键绑定
  • 参考
  • 完结

前言

在游戏开发中,控制输入是至关重要的一环。Unity的新输入系统(Input System)为开发者提供了强大的工具来管理和处理用户输入,不仅支持各种平台上的多种输入设备,还能轻松处理复杂的输入操作和映射。本文将深入探讨如何使用Unity的新输入系统重新绑定控制按键,为开发者提供一套全面且完善的解决方案。

安装InputSystem,并导入重新绑定控制按键例子

在这里插入图片描述

输入控制

绑定映射
在这里插入图片描述
代码输入控制

public class UserInput : MonoBehaviour
{
    // Singleton instance
    public static UserInput instance;

    // 移动输入向量
    public Vector2 MoveInput { get; private set; }
    // 跳跃输入标志位
    public bool JumpJustPressed { get; private set; }
    public bool JumpBeingHeld { get; private set; }
    public bool JumpReleased { get; private set; }
    // 攻击输入标志位
    public bool AttackInput { get; private set; }
    // 冲刺输入标志位
    public bool DashInput { get; private set; }
    // 菜单打开/关闭输入标志位
    public bool MenuopencloseInput { get; private set; }

    private PlayerInput _playerInput;
    private InputAction _moveAction;
    private InputAction _jumpAction;
    private InputAction _attackAction;
    private InputAction _dashAction;
    private InputAction _menuopenCloseAction;

    private void Awake()
    {
        // 单例模式实例化
        if (instance == null)
        {
            instance = this;
        }

        _playerInput = GetComponent<PlayerInput>();
        SetupInputActions();
    }

    private void Update()
    {
        // 每帧更新输入状态
        UpdateInputs();
    }

    private void SetupInputActions()
    {
        // 从PlayerInput组件初始化输入动作
        _moveAction = _playerInput.actions["Move"];
        _jumpAction = _playerInput.actions["Jump"];
        _attackAction = _playerInput.actions["Attack"];
        _dashAction = _playerInput.actions["Dash"];
        _menuopenCloseAction = _playerInput.actions["Menuopenclose"];
    }

    private void UpdateInputs()
    {
        // 更新特定的输入数值
        MoveInput = _moveAction.ReadValue<Vector2>(); // 读取移动输入值
        JumpJustPressed = _jumpAction.WasPressedThisFrame(); // 检测跳跃是否刚按下
        JumpBeingHeld = _jumpAction.IsPressed(); // 检测跳跃是否正在按住
        JumpReleased = _jumpAction.WasReleasedThisFrame(); // 检测跳跃是否刚释放
        AttackInput = _attackAction.WasPressedThisFrame(); // 检测攻击是否刚按下
        DashInput = _dashAction.WasPressedThisFrame(); // 检测冲刺是否刚按下
        MenuopencloseInput = _menuopenCloseAction.WasPressedThisFrame(); // 检测菜单打开/关闭是否刚按下
    }
}

拿例子的重绑定按钮预制体

拖入预制体
在这里插入图片描述
每个按钮需要一个预制体,包括重置全部按钮
在这里插入图片描述

绑定对应按钮

在这里插入图片描述

升级文本

默认使用的text旧文本,我们可以进行升级为textMeshPro
在这里插入图片描述
记得在程序集加入textMeshPro引用
在这里插入图片描述
修改
在这里插入图片描述
在这里插入图片描述
修改预制体的3个文本都为TextMeshPro
在这里插入图片描述

新增全屏覆盖的提示文本

将他放到最底部,确保它可以覆盖其他的UI
在这里插入图片描述
默认禁用
在这里插入图片描述

配置绑定

在这里插入图片描述

绑定当前启用的输入键

现在运行会会报错不允许我们绑定当前启用的输入键
在这里插入图片描述
修改代码,在绑定时先禁用当前输入,绑定完成或取消绑定再启用输入
在这里插入图片描述
效果
在这里插入图片描述

禁用一些按钮的绑定和退出按键绑定状态

比如禁用鼠标 鼠标左键
绑定esc为退出按键绑定状态
在这里插入图片描述

重复绑定按钮问题

比如这样
在这里插入图片描述
修改
在这里插入图片描述

在这里插入图片描述

重置绑定重复按钮

比如现在冲锋和Dash分别绑定了Z和Q
在这里插入图片描述
我们将冲锋按钮修改为其他按键,再将攻击按钮修改为Z后,点击重置冲锋按钮,就会出现这样的问题
在这里插入图片描述
修改
在这里插入图片描述

在这里插入图片描述
效果,使用和前面一样的步骤,这样绑定的按钮就直接交换了位置
在这里插入图片描述

修改按钮绑定名字

我们不希望这里显示的按钮绑定名是默认的名字
在这里插入图片描述

添加两个变量

在这里插入图片描述
这时候变量还是不会在面板显示出来,我们需要修改绑定脚本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
效果,面板显示了我们刚才创建的两个变量
在这里插入图片描述

勾选第一个为真才显示输入文本

修改
在这里插入图片描述
在这里插入图片描述
效果
在这里插入图片描述
在这里插入图片描述

修改实际生效

在这里插入图片描述
效果
在这里插入图片描述

绑定图标

例子默认给我们提供了脚本
在这里插入图片描述
不过它默认只提供了Xbox和ps4手柄的图标,代码会根据控件路径分配对应图标
在这里插入图片描述
如果你不知道控件路径,可以点击这个T按钮显示具体路径,比如这里的rightTrigger对应图标,这样你就可以做很多自定义的事,比如修改键盘按钮绑定的图标
在这里插入图片描述

这里演示绑定Xbox图标

如果你不想找图标信息,也可以使用例子默认提供的图标信息,它给了我们两套图标,分别是Xbox和ps4的
在这里插入图片描述
绑定图标
在这里插入图片描述

在这里插入图片描述
修改完成尝试运行报错
在这里插入图片描述

这是因为我们需要在我们的预制件中添加一个图像,它需要准确地命名为ActionBindingIcon
在这里插入图片描述
我们添加它,设置好宽高,并默认关闭
在这里插入图片描述
效果
在这里插入图片描述

重置所有按钮

新增脚本
在这里插入图片描述
给按键和手柄绑定不同的参数(如果有多个设备的话)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
记得绑定按钮重置事件
在这里插入图片描述

保存和加载我们的按键绑定

例子也默认给了我们一个保存加载脚本
在这里插入图片描述
查看脚本,实现其实很简单,它将我们的数据保存在一个名为bindings的json文件中,当我们禁用此脚本时,它将保存,当我们启用这个脚本时,它会加载
在这里插入图片描述

分别拖入脚本到我们的按键和手柄画布绑定
在这里插入图片描述

参考

https://www.youtube.com/watch?v=qXbjyzBlduY

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1942520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【常见开源库的二次开发】基于openssl的加密与解密——MD5算法源码解析(五)

一、MD5算法分析 &#xff1a; 1.1 关于MD5 “消息摘要”是指MD5&#xff08;Message Digest Algorithm 5&#xff09;算法。MD5是一种广泛使用的密码散列函数&#xff0c;它可以生成一个128位&#xff08;16字节&#xff09;的散列值。 RFC 1321: MD5由Ronald Rivest在1992…

Windows 磁盘分区样式有几种?如何查看电脑分区样式?

在使用 Windows 操作系统的过程中&#xff0c;磁盘分区是一个重要的概念。磁盘分区的方式直接影响到数据存储和系统运行的效率。磁盘分区的时候也有不同的样式&#xff0c;你知道分区类型有哪些吗&#xff1f;不同的分区样式决定了硬盘的分区方式、可支持的最大存储容量以及兼容…

某企业网络及服务器规划与设计

目录 1. 项目需求与设计... 5 1.1 项目需求... 5 1.2 组建企业网络内部网的流程... 5 1) 构思阶段... 5 2) 方案设计阶段... 6 3) 工程实施阶段... 6 4) 测试验收... 6 5) 管理维护... 7 1.3 技术可行性分析... 7 1.4 网络组网规则... 8 1.5 网络拓扑... 8 2. 项目所…

气膜体育馆内运动舒服吗—轻空间

气膜体育馆作为一种新型的体育设施&#xff0c;以其灵活的结构和高效的功能受到越来越多体育爱好者的青睐。很多人可能会担心在这种环境中运动是否会感到不适。轻空间将从气膜体育馆的结构特点、环境控制和用户体验三个方面&#xff0c;详细分析在气膜体育馆内运动的舒适度。 气…

如何用JavaScript实现视频观看时间追踪

在网页开发中&#xff0c;跟踪用户与多媒体内容&#xff08;如视频&#xff09;的互动是一项常见需求。无论是教育平台、数据分析&#xff0c;还是用户参与度统计&#xff0c;监控用户如何观看视频内容都能提供宝贵的见解。这篇文章将探索如何使用JavaScript实现视频播放时长的…

win10安装ElasticSearch7.x和分词插件

说明&#xff1a; 以下内容整理自网络&#xff0c;格式调整优化&#xff0c;更易阅读&#xff0c;希望能对需要的人有所帮助。 一 安装 Java环境 ElasticSearch使用Java开发的&#xff0c;依赖Java环境&#xff0c;安装 ElasticSearch 7.x 之前&#xff0c;需要先安装jdk-8。…

飞书群聊机器人自定义机器人接入,并实现艾特@群成员功能

飞书群聊机器人还是比钉钉的要麻烦一点&#xff0c;钉钉的直接通过手机号就可以艾特群里面的人&#xff0c;但是飞书的要想艾特群里面的人&#xff0c;需要使用用户的 Open ID 或 User ID。这两个ID怎么获取呢&#xff1f;还需要在飞书的开放平台上创建一个应用&#xff0c;然后…

requets库传data和传json的区别

传data和传json的qubie 被测对象&#xff0c;白月黑羽系统 系统下载地址&#xff1a; https://www.byhy.net/prac/pub/info/bysms/ 测试用例下载地址&#xff1a; https://cdn2.byhy.net/files/selenium/testcases.xlsx 一、传data import json import requests import pytes…

废锡回收处理的生物回收法

废锡回收处理是一个复杂但重要的过程&#xff0c;它有助于节约资源、降低生产成本&#xff0c;并减少环境污染。以下是废锡回收处理的主要方法和相关细节&#xff1a; 一、废锡回收处理的主要方法 1. 化学法回收 酸浸法&#xff1a; 原理&#xff1a;通过加入适量的酸&#xff…

设计模式第二天|设计模式创建型:工厂模式、抽象工厂模式、单例模式、建造者模式

文章目录 设计模式的分类工厂模式简单工厂定义核心俗话说优点缺点具体实现 工厂模式&#xff08;Spring IOC控制反转&#xff09;定义核心**组成****俗话说****实现思路****具体实现****使用场景** 抽象工厂模式**前提概念****定义****缺点****具体实现** 单例模式**定义****俗…

Java---后端事务管理

代码世界聚眸光&#xff0c;昼夜敲盘思绪长。 算法心间精构建&#xff0c;编程路上细思量。 屏前架构乾坤定&#xff0c;键上飞驰智慧扬。 默默耕耘成果现&#xff0c;创新科技铸辉煌。 目录 一&#xff0c;概念 二&#xff0c;Spring事务管理 三&#xff0c;rollbackFor事务回…

深入了解软件架构:组件、容器与模块架构图详解

引言 在软件工程中&#xff0c;架构图是描绘系统结构和组件之间关系的重要工具。其中&#xff0c;组件架构图、子系统依赖分析&#xff08;容器图&#xff09;和模块架构图是三种常用的架构表示方法&#xff0c;它们各有侧重&#xff0c;适用于不同层面的架构分析与设计。本文…

JMeter请求导出Excel

前言 今天记录一个使用JMeter模拟浏览器请求后端导出&#xff0c;并下载Excel到指定位置的过程 创建请求 同样先创建一个线程组&#xff0c;再创建一个请求&#xff0c;设置好请求路径&#xff0c;端口号等 查看结果树 右键--添加--监听器--查看结果树 这里可以查看&#…

C语言 | Leetcode C语言题解之第273题整数转换英文表示

题目&#xff1a; 题解&#xff1a; char* singles[] {"", "One ","Two ","Three ","Four ","Five ","Six ","Seven ","Eight ","Nine "}; char* teens[] {"Ten…

二十、Qt位置相关函数

目录 一、函数概述 二、函数实践 三、总结 一、函数概述 Qt 提供了很多关于获取窗体位置及显示区域大小的函数&#xff0c;如 x()、y()和 pos()、react()、size()、geometry()等&#xff0c;统称为“位置相关函数”或“位置函数”&#xff0c; 如下图所示是几种主要的位置函数…

MybatisPlusException: Error: Method queryTotal execution error of sql 的报错解决

项目场景&#xff1a; 相关背景&#xff1a; 开发环境 开发系统时 系统页面加载正常 &#xff0c;发布运行环境后运行一段时间&#xff0c;前端页面 突然出现 报错信息&#xff0c; 报错信息如下&#xff1a; MybatisPlusException: Error: Method queryTotal execution erro…

gitee的怎么上传项目

前提 1.先下载Git Bash (如果没有下载的宝子们下载连接如下: 链接: link ) 项目上传到Gitee步骤 1.在Gitee上建立远程仓库 2.填写相关信息 3.进入本地你想要上传的文件目录下&#xff0c;右键单击空白处&#xff0c;点击Git Bash Here 4.配置你的用户名和邮箱 git con…

【快速逆向二/无过程/有源码】掌上高考—2024高考志愿填报服务平台

逆向日期&#xff1a;2024.07.21 使用工具&#xff1a;Node.js 加密工具&#xff1a;Crypto-js标准库 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算法&…

【JVM基础04】——组成-什么是虚拟机栈?

目录 1- 引言&#xff1a;虚拟机栈1-1 虚拟机栈是什么&#xff1f;(What)1-2 为什么用虚拟机栈&#xff1f;虚拟机栈的作用 (Why) 2- ⭐核心&#xff1a;栈的常见问题(How)2-1 方法内的局部变量是否线程安全&#xff1f;线程不安全的局部变量 2-2 什么情况会导致栈内存溢出&…

数据传输工具性能深度评测(阿里云、百度智能云)

阿里云、百度智能云作为领先的云服务提供商&#xff0c;都为数据库提供了配套的数据库工具服务&#xff0c;其中 DTS 是迁移与同步业务的核心服务&#xff0c;本次测试旨在深入比较阿里云与百度智能云在 DTS 数据传输服务性能方面的表现&#xff0c;为企业在选择合适的数据传输…