Menu
CoddyTech

Pressionado neste quadro

Parte da seção Criando Jogos de Verdade do Journey de Unity da Coddy. Lição 46 de 60.

isPressed responde “está pressionado agora?” em cada quadro enquanto a tecla ou o botão está pressionado. Para algo que deve acontecer uma vez por pressionamento, um controle tem mais duas respostas: wasPressedThisFrame é true apenas no quadro em que a tecla ou o botão foi pressionado, e wasReleasedThisFrame apenas no quadro em que foi solto. Elas substituem Input.GetKeyDown e Input.GetKeyUp, e também GetMouseButtonDown e GetMouseButtonUp. Este carimbo desce quando o botão do mouse é pressionado e sobe quando é solto:

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;
        }
    }
}

Um clique mantido por meio segundo registra Stamp 1 uma vez, move o carimbo para baixo uma vez e depois para cima uma vez. Com isPressed no primeiro if, o mesmo clique registraria cerca de 30 carimbos e afundaria o carimbo 15 unidades na mesa. As teclas funcionam da mesma forma: Keyboard.current.spaceKey.wasPressedThisFrame é true uma vez por pressionamento da barra de espaço.

challenge icon

Desafio

Médio

Inicie o velocista com a tecla Espaço: para baixo para agachar, para cima para correr.

  1. Em Update(), quando !running e Keyboard.current.spaceKey.wasPressedThisFrame: defina set, mova para baixo crouch, registre Set.
  2. Quando set e wasReleasedThisFrame: limpe set, defina running, mova para cima crouch, registre Go!.
  3. Enquanto running, mova-se ao longo de +z a speed unidades por segundo.

Pressione “Jogar”, mantenha Espaço pressionada e solte: Set, depois Go! no Console. Em seguida, clique em “Verificar”.

Experimente você mesmo

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()
    {
        // Ao pressionar Space: agache e registre Set. Ao soltar Space: levante, registre Go! e corra.
    }
}

Todas as lições de Criando Jogos de Verdade

Pratique por conta própria: Playground de Unity