微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检测被按下的键数 Unity C#

如何解决检测被按下的键数 Unity C#

我正在尝试制作一个基于网格的移动系统,我有一个错误,当多个输入进来时,玩家会移动奇数。有没有办法检测键盘上有多少键被按下?

例如,类似于:

>>> pd.api.types.infer_dtype(df2["postal"])
'string'
>>> pd.api.types.infer_dtype(df1["postal"])
'floating'

什么的?

我知道如果使用移动设备,您可以进行触摸计数,但我不确定按键。感谢您的时间!

解决方法

如果您只是想实际测试您所说的内容,那么检查 Input.anyKey

就足够了

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

if(Input.anyKey)

如果您想检查特定的键,您可以使用 Input.GetKeyLinq 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.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)));
}

如果您真的想获得键盘上任意按键的数量,直接使用 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。