Godot v4制作打字游戏:如何获取InputEventKey的小写按键字符?
Godot 4 打字游戏获取正确大小写字符的解决方案
问题本质
你遇到的不是Godot的正常行为,是因为你用的get_keycode_with_modifiers()、keycode、key_label这些API本身就不是用来获取实际输入字符的:
get_keycode_with_modifiers()返回的是键盘按键对应的原始扫描码ASCII值(比如A键固定对应65,也就是大写'A'),不会考虑Shift键或大写锁定的状态key_label是按键的物理标签名称,同样只显示按键本身的标识,不处理输入的实际字符
正确解决方案
要获取考虑Shift/大写锁定状态的实际输入字符,应该使用InputEventKey的**unicode属性**,它会自动根据当前输入状态返回正确的字符编码。
修改后的代码如下:
func _unhandled_input(event:InputEvent) -> void: if event is InputEventKey and not event.is_pressed(): var typed_event = event as InputEventKey # 只处理可打印的ASCII字符,避免输出控制字符(如回车、退格) if typed_event.unicode >= 32 and typed_event.unicode <= 126: var key_typed = char(typed_event.unicode) print(key_typed)
补充说明
unicode属性会自动识别当前的输入状态:未按Shift且未开大写锁定时返回小写字符,按下Shift或开启大写锁定时返回大写字符- 加上
unicode >=32 and <=126的判断是为了过滤掉回车、退格、Tab这类不可打印的控制键,如果你需要处理这些按键,可以单独判断对应的unicode值(比如回车是13,退格是8)
内容的提问来源于stack exchange,提问作者user23033721
相关产品推荐
相关产品推荐

