检测被推入Unity c#的键数



我正尝试着创造一个基于网格的移动系统,但我发现了一个漏洞,即当玩家输入多个输入时,他们将移动一个奇怪的数量。是否有一种方法可以检测键盘上有多少个键被按下?

例如:

If(numberOfKeysDown > 1)

还是什么?

我知道你可以做触摸计数如果用手机工作,但我不确定键。谢谢你的时间!

如果你只是想实际测试你所说的应该足够检查Input.anyKey

当前是否有任何键或鼠标按钮按下

if(Input.anyKey)

如果您想检查特定的键,您可以使用Input.GetKey和Linq Count,例如

// Fancy queries ;)
using System.Linq;
...
// The keycodes you wan to check
private HashSet<KeyCode> keysToCheck = { KeyCode.W, KeyCode.A, KeyCode.S, KeyCode.D };
int numberOfKeysPressed;
private void Update ()
{
    numberOfKeysPressed = keysToCheck.Count(key => Input.GetKey(key));
    // This basically equals doing 
    // var numberOfKeysPressed = 0;
    // foreach(var key in KeyToCheck)
    //{
    //    if(Input.GetKey(key)) numberOfKeysPressed++;
    //}
}

或者您可以使用Input.GetKeyDownInput.GetKeyUp,并执行

private HashSet<KeyCode> keysToCheck = { KeyCode.W, KeyCode.A, KeyCode.S, KeyCode.D };
int numberOfKeysPressed;
private void Update ()
{
    foreach (var key in KeyToCheck)
    {
        if(Input.GetKeyDown(key)) numberOfKeysPressed++;
        if(Input.GetKeyUp(key)) numberOfKeysPressed--;
    }
}

如果你想要所有的KeyCode值,你可以使用

private void Awake ()
{
    keysToCheck = new HashSet<KeyCode>((KeyCode[])Enum.GetValues(typeof(KeyCode)));
}

如果您真的想获得any的数量直接使用Event.current并执行类似

这样的操作可能会更有效。
HashSet<string> currentlyPressedKeys = new HashSet<string>();
void OnGUI () 
{
    Event e = Event.current;
    switch(e.type)
    {
        case EventType.KeyDown:
            var key = e.keyCode.ToString();
            if(!currentlyPressedKeys.Contains(key)) currentlypressedKeys.Add(key);
            break;
        case EventType.KeyUp:
            var key = e.keyCode.ToString();
            if(currentlyPressedKeys.Contains(key)) currentlypressedKeys.Remove(key);
            break;
    }
}

现在无论你需要知道什么,你都可以做例如

if(currentlyPressedKeys.Count > XY)

我认为这没有特定的方法。

你也可以使用Input.GetKeyDown编写自己的计数器方法。

一样
int GetKeysDownCount() {
    var keysDown = 0;
    if(Input.GetKeyDown(KeyCode.W)
        keysDown++;
    if(Input.GetKeyDown(KeyCode.A)
        keysDown++;
    if(Input.GetKeyDown(KeyCode.S)
        keysDown++;
    if(Input.GetKeyDown(KeyCode.D)
        keysDown++;
    return keysDown;
}
https://docs.unity3d.com/ScriptReference/Input.GetKeyDown.html

相关内容

  • 没有找到相关文章

最新更新