Pulsado en este fotograma
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 46 de 60.
isPressed responde «¿está presionado ahora?» en cada fotograma mientras se mantiene presionado. Para algo que debería ocurrir una sola vez por pulsación, un control tiene otras dos respuestas: wasPressedThisFrame es true solo en el fotograma en que se presiona la tecla o el botón, y wasReleasedThisFrame solo en el fotograma en que se suelta. Sustituyen a Input.GetKeyDown y Input.GetKeyUp, y a GetMouseButtonDown y GetMouseButtonUp. Este sello de goma baja cuando se presiona el botón del ratón y se levanta cuando se suelta:
using UnityEngine;
using UnityEngine.InputSystem;
public class Stamp : MonoBehaviour
{
public float drop = 0.5f;
private int stamps;
void Update()
{
Mouse mouse = Mouse.current;
if (mouse.leftButton.wasPressedThisFrame)
{
transform.position += Vector3.down * drop;
stamps++;
Debug.Log("Stamp " + stamps);
}
if (mouse.leftButton.wasReleasedThisFrame)
{
transform.position += Vector3.up * drop;
}
}
}Si mantienes un clic durante medio segundo, se registra Stamp 1 una sola vez, y el sello baja una vez y vuelve a subir una vez. Con isPressed en el primer if, el mismo clic registraría unos 30 sellos y hundiría el sello 15 unidades en el escritorio. Las teclas funcionan igual: Keyboard.current.spaceKey.wasPressedThisFrame es true una vez por cada pulsación de la barra espaciadora.
Desafío
IntermedioInicia al velocista con la barra espaciadora: baja para agacharse y sube para correr.
- En
Update(), cuando!runningyKeyboard.current.spaceKey.wasPressedThisFrame: activaset, muévete hacia abajocrouch, registraSet. - Cuando
setywasReleasedThisFrame: desactivaset, activarunning, muévete hacia arribacrouch, registraGo!. - Mientras
running, muévete a lo largo de +z aspeedunidades por segundo.
Pulsa «Jugar», mantén pulsada la barra espaciadora y suéltala: Set, después Go! en la consola. Después, pulsa «Comprobar».
Pruébalo tú mismo
using UnityEngine;
using UnityEngine.InputSystem;
public class Sprinter : MonoBehaviour
{
public float speed = 6f;
public float crouch = 0.3f;
private bool set;
private bool running;
void Update()
{
// Al pulsar Space: agacharse y registrar Set. Al soltar Space: levantarse, registrar Go! y correr.
}
}
Todas las lecciones de Creación de juegos reales
1Texto en pantalla
Canvas y textoMuestra la puntuaciónDa formato a los númerosUn temporizador de cuenta regresivaRepaso: velocímetro2Botones y pantallas
Botones y onClickLambdasConectar en el InspectorPaneles activados y desactivadosBarras de saludRepaso: tienda de mejoras5Guardar con PlayerPrefs
Guardar un númeroCargar con un valor predeterminadoPuntuación más altaGuardar ajustesRepaso: monedas en el banco3El gestor del juego
Un solo script ejecuta el juegoEl SingletonEstados del juegoActivar el estadoRepaso: gestor de rondas6Proyecto: Corredor sin fin
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entradaPractica por tu cuenta: Playground de Unity