Menu
CoddyTech

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.

challenge icon

Desafío

Intermedio

El 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 crouch unidades hacia abajo y se registra Set.
  • Cuando se suelta la tecla Espacio después de eso, el corredor vuelve a ponerse de pie (sube crouch unidades), se registra Go! y comienza la carrera: a partir de entonces corre en la dirección +z a speed unidades por segundo.
  • Mantener pulsada la tecla Espacio registra Set una 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.
    }
}
quiz iconPonte a prueba

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