Unity C# 自定义按键变量调用GetKey()时方向键失效问题
问题原因
Input.GetKey()和Input.GetKeyDown()的字符串参数必须匹配Unity内置的固定按键命名规则,方向键的合法名称不是自定义写法,名称填错就会完全无响应。另外原代码移动逻辑直接重置y轴速度,会导致跳跃过程中按方向键直接打断竖直运动,手感异常。
合法按键名参考(无需使用Input Manager输入系统)
直接在Inspector对应输入框填入以下名称即可绑定对应按键,名称不区分大小写,但单词间的空格不能省略:
- 方向键上:
up arrow - 方向键下:
down arrow - 方向键左:
left arrow - 方向键右:
right arrow - 字母/主键盘数字键:直接填对应字符,例如W填
w、A填a、数字1填1 - 特殊常用键:空格填
space、回车填return、左Shift填left shift、右Ctrl填right ctrl - 功能键:F1-F12直接填
f1/f2……f12即可 - 小键盘按键:格式为
[数字],例如小键盘0填[0]、小键盘回车填[enter]
注意:方向键名称不能写成
RightArrow/方向键右这类错误格式,必须是带空格的right arrow写法,否则无法识别。
修正后的代码
修复了移动时重置竖直速度的问题,完全保留自定义字符串绑定按键的逻辑,不需要修改实现方案:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Movement : MonoBehaviour { public int JumpHeight; public int MoveSpeed; private Rigidbody2D rb; public string JumpButton = "space"; public string MoveRightButton = "d"; public string MoveLeftButton = "a"; private void Start() { rb = GetComponent<Rigidbody2D>(); } private void Update() { if(Input.GetKeyDown(JumpButton)) { // 保留当前水平速度,仅修改竖直速度实现跳跃 rb.velocity = new Vector2(rb.velocity.x, JumpHeight); } if(Input.GetKey(MoveRightButton)) { // 保留当前竖直速度,不打断跳跃状态 rb.velocity = new Vector2(MoveSpeed, rb.velocity.y); } if(Input.GetKey(MoveLeftButton)) { rb.velocity = new Vector2(-MoveSpeed, rb.velocity.y); } } }
配置说明
- 脚本挂载后,默认已经绑定空格跳跃、A/D左右移动,需要改按键直接在Inspector面板修改对应字符串字段的值即可
- 绑定方向键时,直接在对应字段填入
left arrow/right arrow就能正常触发 - 不要给键名加多余的引号、中文符号,否则会识别失败
内容的提问来源于stack exchange,提问作者RaptoRR
相关产品推荐
相关产品推荐

