Pulsado en este fotograma
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 45 de 56.
isPressed responde «¿está pulsado ahora?» en cada fotograma mientras se mantiene pulsado. Para algo que debería ocurrir una sola vez por pulsación, un control tiene dos respuestas más: wasPressedThisFrame es true solo en el fotograma en que se pulsa 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 pulsa 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 se mantiene pulsado un clic durante medio segundo, se registra Stamp 1 una sola vez, y el sello baja una vez y vuelve a subir una vez. Si se usara 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 de la misma manera: Keyboard.current.spaceKey.wasPressedThisFrame es true una vez por cada pulsación de la barra espaciadora.
Desafío
IntermedioEl velocista espera en los tacos de salida. Su script tiene speed (6) y crouch (0.3).
- Cuando se pulsa la tecla Espacio, el corredor se agacha en los tacos: se mueve
crouchunidades hacia abajo y se registraSet. - Cuando se suelta la tecla Espacio después de eso, el corredor vuelve a ponerse de pie (sube
crouchunidades), se registraGo!y comienza la carrera: a partir de entonces corre en la dirección +z aspeedunidades por segundo. - Mantener pulsada la tecla Espacio registra
Setuna sola vez, no una vez por fotograma. Una vez que el corredor está corriendo, la tecla Espacio ya no hace nada.
Lee la tecla Espacio con Keyboard.current. Pulsa Play, mantén pulsada la tecla Espacio y suéltala; después, pulsa Check.
Pruébalo tú mismo
using UnityEngine;
using UnityEngine.InputSystem;
public class Sprinter : MonoBehaviour
{
public float speed = 6f;
public float crouch = 0.3f;
void Update()
{
// Al pulsar Space: agáchate y registra Set. Al soltar Space: levántate, registra Go! y corre.
}
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
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ímetro4Escenas y niveles
Cargar una escenaReiniciar el nivelSiguiente nivelConservar entre escenasRepaso: selección de nivel10Proyecto: plataformas 3D
El recorridoPlataformas móviles2Botones 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 infinito
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entrada