Teclado e mouse
Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 44 de 56.
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 por seu valor Key. Mouse.current é o mouse, com leftButton, rightButton e position. O isPressed de um controle é true em cada quadro em que ele permanece pressionado, como acontecia com Input.GetKey. Este submarino mergulha e emerge 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 um erro 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, como Input.mousePosition.
Desafio
MédioVoe com o balão de ar quente usando o Input System. Seu script tem drift (2), rise (3), sink (1), groundY (2) e flame, a chama do queimador sob o balão.
- Enquanto a seta para a direita ou D estiver pressionada, o balão se desloca para a direita (ao longo de +x) a
driftunidades por segundo; enquanto a seta para a esquerda ou A estiver pressionada, ele se desloca para a esquerda. - O queimador fica ligado enquanto a tecla Espaço ou o botão esquerdo do mouse estiver pressionado. Mostre
flamesomente enquanto ele estiver ligado. - Com o queimador ligado, o balão sobe a
riseunidades por segundo. Com ele desligado, desce asinkunidades por segundo e nunca fica abaixo degroundY.
Use Keyboard.current e Mouse.current. Este projeto está configurado como um novo projeto Unity 6 (Active Input Handling: Input System Package), então a classe Input gera uma InvalidOperationException aqui. Pressione Play e voe; depois, Check.
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
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Criando jogos de verdade
1Texto na tela
Canvas e textoExiba a pontuaçãoFormate númerosUm cronômetro regressivoRevisão: velocímetro4Cenas e Fases
Carregar uma CenaReiniciar a FasePróxima FaseManter entre CenasRevisão: Seleção de Fases10Projeto: Jogo de Plataforma 3D
O PercursoPlataformas Móveis2Botões e telas
Botões e onClickLambdasConectando no InspectorPainéis ligados e desligadosBarras de vidaRevisão: Loja de melhorias5Salvando com PlayerPrefs
Salvar um númeroCarregar com um valor padrãoRecordeSalvar configuraçõesRevisão: Moedas no banco3O Gerenciador do Jogo
Um Script Controla o JogoO SingletonEstados do JogoAlternando o EstadoRevisão: Gerenciador de Rodadas6Projeto: Corredor Infinito
Três FaixasObstáculos à Frente9O Novo Sistema de Entrada
Dois sistemas de entradaTeclado e mousePressionado neste quadroAções de entradaRecapitulação: troca de entrada