Menu
CoddyTech

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.

challenge icon

Desafío

Intermedio

Inicia al velocista con la barra espaciadora: baja para agacharse y sube para correr.

  1. En Update(), cuando !running y Keyboard.current.spaceKey.wasPressedThisFrame: activa set, muévete hacia abajo crouch, registra Set.
  2. Cuando set y wasReleasedThisFrame: desactiva set, activa running, muévete hacia arriba crouch, registra Go!.
  3. Mientras running, muévete a lo largo de +z a speed unidades 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

Practica por tu cuenta: Playground de Unity