问题描述
我正在尝试制作一个基于网格的移动系统,我有一个错误,当多个输入进来时,玩家会移动奇数。有没有办法检测键盘上有多少键被按下?
例如,类似于:
>>> pd.api.types.infer_dtype(df2["postal"])
'string'
>>> pd.api.types.infer_dtype(df1["postal"])
'floating'
什么的?
我知道如果使用移动设备,您可以进行触摸计数,但我不确定按键。感谢您的时间!
解决方法
如果您只是想实际测试您所说的内容,那么检查 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.GetKeyDown
和 Input.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