【问题标题】:Unity rebinded Keys names are wrong on azerty keyboardunity rebinded Keys 名称在 azerty 键盘上是错误的
【发布时间】:2022-08-06 01:18:22
【问题描述】:
所以我有一个有效的重新绑定脚本,但问题是当我想显示重新绑定的键名时。
下面的代码为 qwerty 键盘返回正确的名称,但不为 azerty 键盘返回正确的名称!
但是,绑定是正确的,因为无论键盘布局如何,控件都可以正常工作。唯一损坏的是显示,也就是说在 \"UpdateText(string key)\" void 中输入的值:
RebindSection[j].UpdateText(InputControlPath.ToHumanReadableString(
Actions[j].action.bindings[bindingIndex].effectivePath,
InputControlPath.HumanReadableStringOptions.OmitDevice));
有谁知道我怎样才能获得键的真实名称而不是我们键盘中键的位置?
编辑:我正在ubuntu上开发游戏,我上面写的脚本在编辑器中工作,但在构建中没有......
标签:
unity3d
keyboard
keyboard-layout
dynamic-rebinding
【解决方案1】:
说白了,Unity Engine 使用物理键信号来检测来自键盘的输入,但是由于有点难以猜测“0100100”键盘信号的含义,它在键的信号上放置了一个基于 QWERTY 的标签,这样我们,开发人员,至少可以知道发生了什么。
这种方法的唯一问题是两种类型的键盘之间存在差异键,例如 QWERTY 键盘上并不总是存在的从右到左 shift 键的“< >”键。 (大多数 AZERTY 键盘都有一个小的左 Shift 键和一个介于它之间的键和带有“<>”的 W 键,而大多数 QWERTY 键盘只有一个宽的左 Shift 键,可以同时覆盖两个键。)
这就是物理键遇到障碍的地方,因为在这种情况下,AZERTY 键盘键的“<>”实际上只是......在 QWERTY 键盘上不存在。 Unity 可以注册键(因为它确实有自己的唯一信号),但这会使 QWERTY 键盘上的键无法访问。这类键在开发术语中称为“白键”,其规则是“除非它用于其他地方可用的操作,否则不要默认使用它们。如果可能的话,留给用户定义。”。
如果您想要实际的基于键盘的键名,可以使用以下代码访问键字符串:Keyboard.current.KEYCODE.displayName
将“KEYCODE”替换为“aKey”等键名,这将为您提供基于您当前键盘语言和布局的 QWERTY 键盘上“A”处的物理键。