【发布时间】:2015-10-21 10:00:43
【问题描述】:
我正在为我的游戏实现一个虚拟控制台,我正在通过一个事件管道(可观察主题)来传递 Key up 事件,并使用
在虚拟控制台端处理它们public void ReceiveInput (Event e)
{
Debug.Log ("ReceiveInput: " + e.ToString ());
if (e.keyCode == KeyCode.Backspace) {
if (ConsoleInputLine.LineText.Length > 2)
ConsoleInputLine.RemoveLastChar ();
return;
}
if (e.keyCode == KeyCode.Return || e.keyCode == KeyCode.KeypadEnter) {
ConsoleInputLine.LineText = "$ ";
return;
}
var chr = e.keyCode.ToString ();
if (e.capsLock || e.shift)
chr = chr.ToUpper ();
else
chr = chr.ToLower ();
ConsoleInputLine.AppendText ("" + chr);
}
虽然这适用于简单的 A-Z 和 a-z 字母,但当您访问数字和其他字符时,我将获得原始键名,例如“Q”键上方的水平“1”键的“Alpha1”,“ Alpha2" 表示 "W" 上方的 "2" 等
有没有一种方法可以轻松地从键事件中获取“渲染”文本,而无需构建所有可能的键码结果的切换?
PS:我忘了说,shift+Alpha1 是“!”在美国 Querty 中 shift+Alpha2 为“@”等,但在不同国家的键盘上会有所不同,对世界上每个键盘都做 switch 语句是不可行的。
【问题讨论】:
-
我不认为有办法在 Unity 中做你想做的事——它只是不知道本地化的键盘映射。他们在自己的 UI 代码中实现了一个类似的 switch 语句 - 您可以看到他们如何从第 844 行开始将文本添加到输入字段bitbucket.org/Unity-Technologies/ui/src/…
-
在第 972 行,他们实际上是从中获取角色。但是,由于某种原因,我的总是空的。
标签: unity3d unity3d-gui unity3d-5