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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:45:42