【问题标题】: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”处的物理键。

    【讨论】:

      猜你喜欢
      • 2021-11-14
      • 2016-01-19
      • 2012-05-28
      • 2014-02-07
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 2021-12-18
      • 2015-02-08
      相关资源
      最近更新 更多