Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3D将关键点事件转换为纯文本_Unity3d_Unity3d Gui_Unity3d 5 - Fatal编程技术网

Unity3D将关键点事件转换为纯文本

Unity3D将关键点事件转换为纯文本,unity3d,unity3d-gui,unity3d-5,Unity3d,Unity3d Gui,Unity3d 5,我正在为我的游戏实现一个虚拟控制台,我正在通过一个事件管道(可观察的主体)传递关键事件,并使用 public void ReceiveInput (Event e) { Debug.Log ("ReceiveInput: " + e.ToString ()); if (e.keyCode == KeyCode.Backspace) { if (ConsoleInputLine.LineText.Length > 2) ConsoleI

我正在为我的游戏实现一个虚拟控制台,我正在通过一个事件管道(可观察的主体)传递关键事件,并使用

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”,而“W”键上方的“2”键为“Alpha2”,等等

有没有一种方法可以轻松地从键事件中获取“呈现”文本,而无需构建所有可能的键代码结果的切换

PS:我忘了提到,shift+Alpha1在美国是“!”,shift+Alpha2是“@”,等等,但在不同国家的键盘上它会有所不同,并且不可能为世界上的每个键盘都做出切换声明。

这不是正确的答案

把它放在这里是为了帮助进一步的研究或者让某人摆脱困境

对于我们这些只会发牢骚的键盘来说,这项功能暂时有效,直到有人给出正确答案:

public static char ToChar (this Event e)
{
    var key = e.keyCode;
    char c = '\0';
    if ((key >= KeyCode.A) && (key <= KeyCode.Z)) 
        return (char)((int)((e.shift || e.capsLock) ? 'A' : 'a') + (int)(key - KeyCode.A));
    if ((key >= KeyCode.Alpha0) && (key <= KeyCode.Alpha9)) {
        if (e.shift) {
            var specials = new char[] {'!', '@', '#', '$', '%', '^', '&', '*', '(', ')'};
            return specials [(int)(key - KeyCode.Alpha0)];
        }
        return (char)((int)'0' + (int)(key - KeyCode.Alpha0));
    }
    if (key == KeyCode.Space)
        return ' ';
    if (key == KeyCode.Quote)
        return (e.shift) ? '"' : '\'';
    if (key == KeyCode.LeftBracket)
        return (e.shift) ? '{' : '[';
    if (key == KeyCode.RightBracket)
        return (e.shift) ? '}' : ']';
    if (key == KeyCode.BackQuote)
        return (e.shift) ? '~' : '`';
    if (key == KeyCode.Backslash)
        return (e.shift) ? '|' : '\\';
    if (key == KeyCode.Equals)
        return (e.shift) ? '+' : '=';
    if (key == KeyCode.Minus)
        return (e.shift) ? '_' : '-';
    if (key == KeyCode.Semicolon)
        return (e.shift) ? ':' : ';';


    if (key == KeyCode.Comma)
        return (e.shift) ? '<' : ',';
    if (key == KeyCode.Period)
        return (e.shift) ? '>' : '.';
    if (key == KeyCode.Slash)
        return (e.shift) ? '?' : '/';


    // implement more
    return c;
}
publicstaticchartochar(此事件为e)
{
var key=e.keyCode;
字符c='\0';

如果((键>=KeyCode.A)和&(键=KeyCode.Alpha0)和(键我不认为在Unity中有什么方法可以做你想做的事情-它只是不知道本地化的键映射。他们在自己的UI代码中实现了一个类似的switch语句-你可以看到他们是如何将文本添加到输入字段中的,从第844行到第972行,他们实际上是从中获取字符的。然而,我的总是空的出于某种原因。