Menu
CoddyTech

Teclado e mouse

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

O Input System fornece um objeto para cada dispositivo. Keyboard.current é o teclado, e cada tecla nele é um controle com um nome: spaceKey, aKey, upArrowKey ou Keyboard.current[Key.Space] para qualquer tecla usando seu valor Key. Mouse.current é o mouse, com leftButton, rightButton e position. isPressed de um controle é true em cada quadro em que ele é mantido pressionado, como acontecia com Input.GetKey. Este submarino mergulha e sobe usando as setas e acende o holofote enquanto o botão do mouse está pressionado:

using UnityEngine;
using UnityEngine.InputSystem;

public class Submarine : MonoBehaviour
{
    public float diveSpeed = 2f;
    public Light searchlight;

    void Update()
    {
        Keyboard keyboard = Keyboard.current;
        if (keyboard == null) return;   // nenhum teclado conectado

        if (keyboard.downArrowKey.isPressed)
            transform.position += Vector3.down * diveSpeed * Time.deltaTime;
        if (keyboard.upArrowKey.isPressed)
            transform.position += Vector3.up * diveSpeed * Time.deltaTime;

        searchlight.enabled = Mouse.current != null && Mouse.current.leftButton.isPressed;
    }
}

current é o dispositivo usado por último e é null quando não há nenhum: um celular ou console pode não ter teclado, e as verificações de null impedem que o script gere uma exceção nesses casos. O teclado não tem eixos, então a seta para baixo e S são duas teclas separadas: um submarino que também deve mergulhar ao pressionar S verifica keyboard.downArrowKey.isPressed || keyboard.sKey.isPressed. Mouse.current.position.ReadValue() fornece a posição do ponteiro como um Vector2 em pixels da tela, a partir do canto inferior esquerdo, assim como Input.mousePosition.

challenge icon

Desafio

Médio

Voe com o balão de ar quente usando Keyboard.current e Mouse.current.

  1. Enquanto rightArrowKey ou dKey estiver isPressed, deslize ao longo de +x a drift unidades por segundo; com leftArrowKey ou aKey, ao longo de -x.
  2. bool burner é verdadeiro quando spaceKey ou leftButton está pressionado; chame flame.SetActive(burner);.
  3. Com o queimador ligado, suba a rise; desligado, desça a sink, nunca abaixo de groundY.

Pressione “Jogar” e voe: mantenha Espaço ou o botão do mouse pressionado para subir. Depois, “Verificar”.

Experimente você mesmo

using UnityEngine;
using UnityEngine.InputSystem;

public class Balloon : MonoBehaviour
{
    public float drift = 2f;
    public float rise = 3f;
    public float sink = 1f;
    public float groundY = 2f;
    public GameObject flame;

    void Update()
    {
        // desloque-se com as setas ou A e D, acione a chama com Space ou o mouse
    }
}

Todas as lições de Criando Jogos de Verdade

Pratique por conta própria: Playground de Unity