赞
踩
在游戏开发中,控制输入是至关重要的一环。Unity的新输入系统(Input System)为开发者提供了强大的工具来管理和处理用户输入,不仅支持各种平台上的多种输入设备,还能轻松处理复杂的输入操作和映射。本文将深入探讨如何使用Unity的新输入系统重新绑定控制按键,为开发者提供一套全面且完善的解决方案。
绑定映射
代码输入控制
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和ps4的
绑定图标
修改完成尝试运行报错
这是因为我们需要在我们的预制件中添加一个图像,它需要准确地命名为ActionBindingIcon
我们添加它,设置好宽高,并默认关闭
效果
新增脚本
给按键和手柄绑定不同的参数(如果有多个设备的话)
记得绑定按钮重置事件
例子也默认给了我们一个保存加载脚本
查看脚本,实现其实很简单,它将我们的数据保存在一个名为bindings的json文件中,当我们禁用此脚本时,它将保存,当我们启用这个脚本时,它会加载
分别拖入脚本到我们的按键和手柄画布绑定
https://www.youtube.com/watch?v=qXbjyzBlduY
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,以便我第一时间收到反馈,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
好了,我是向宇
,https://xiangyu.blog.csdn.net
一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。