Estoy tratando de crear un sistema de movimiento basado en cuadrículas y tengo un error en el que el jugador se mueve una cantidad extraña cuando ingresan varias entradas. ¿Hay alguna forma de detectar cuántas teclas del teclado se presionan?
Por ejemplo, algo como:
If(numberOfKeysDown > 1)¿o algo?
Sé que puedes hacer conteos táctiles si trabajas con un dispositivo móvil, pero no estoy seguro acerca de las teclas. ¡Gracias por tu tiempo!
Si solo desea probar lo que dijo, debería ser suficiente para verificar Input.anyKey
¿Hay alguna tecla o botón del mouse presionado actualmente?
if(Input.anyKey) Si desea verificar claves específicas, puede usar Input.GetKey y Linq Count como, por ejemplo
// 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++; //} } O podría usar Input.GetKeyDown y Input.GetKeyUp y hacer algo como
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--; } } Si desea todos los valores KeyCode , puede usar
private void Awake () { keysToCheck = new HashSet<KeyCode>((KeyCode[])Enum.GetValues(typeof(KeyCode))); } Si realmente desea obtener la cantidad de pulsaciones de teclas en el teclado, probablemente sería más eficiente usar directamente Event.current y hacer algo como
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; } }Ahora, donde sea que necesite saber, puede hacerlo, por ejemplo.
if(currentlyPressedKeys.Count > XY)No creo que haya un método específico para esto.
Sin embargo, podría escribir su propio método de contador usando Input.GetKeyDown .
Al igual que
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