Menu
CoddyTech

Pressionado, Mantido, Solto

Parte da seção Fundamentos de Scripting no Unity do Journey de Unity da Coddy. Lição 19 de 85.

O Unity pode informar três coisas diferentes sobre uma tecla, e cada uma é consultada em Update():

  • Input.GetKeyDown(KeyCode.Space): a tecla Space foi pressionada neste quadro? O resultado é verdadeiro em um único quadro por pressionamento.
  • Input.GetKey(KeyCode.Space): a tecla Space está pressionada agora? O resultado é verdadeiro em todos os quadros enquanto Space estiver pressionada.
  • Input.GetKeyUp(KeyCode.Space): a tecla Space foi solta neste quadro? O resultado é verdadeiro em um único quadro, quando a tecla é solta.

Mantenha Space pressionada por meio segundo a 60 quadros por segundo, e GetKey será verdadeiro em 30 quadros, GetKeyDown no primeiro deles e GetKeyUp no quadro seguinte ao último. Um canhão que dispara uma vez por pressionamento consulta GetKeyDown; com GetKey, um pressionamento dispararia 30 tiros:

public int shots = 0;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        shots++;
        Debug.Log("Shots fired: " + shots);
    }
}

GetKeyUp serve para o que acontece quando o jogador solta a tecla, como o fim de uma corrida. Os três respondem apenas para o quadro atual, por isso devem ser usados em Update(): ele é executado em todos os quadros, enquanto Start() é executado uma vez e deixaria passar quase todos os pressionamentos.

challenge icon

Desafio

Fácil

A funda acumula carga enquanto a barra de espaço estiver pressionada e informa o disparo ao soltá-la.

  1. Em Update(), enquanto Input.GetKey(KeyCode.Space) for verdadeiro, adicione Time.deltaTime a charge.
  2. Ao chamar Input.GetKeyUp(KeyCode.Space), registre "Charge: " + charge e, em seguida, defina charge como 0.

Pressione “Jogar”, mantenha a barra de espaço pressionada e solte-a: o Console exibirá uma linha como Charge: 1.5. Em seguida, clique em “Verificar”.

Experimente você mesmo

using UnityEngine;

public class Slingshot : MonoBehaviour
{
    float charge = 0f;

    void Update()
    {
        // Enquanto Space estiver pressionada: charge aumenta em 1 a cada segundo.
        // Quando Space for solta: registre charge no log e depois redefina-a para 0.
    }
}

Todas as lições de Fundamentos de Scripting no Unity

Pratique por conta própria: Playground de Unity