Ações de entrada
Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 46 de 56.
Testar as teclas uma por uma vincula um script ao teclado. Uma ação nomeia o que o jogador faz, e o projeto lista quais teclas, analógicos e botões a acionam. Um novo projeto Unity 6 vem com um conjunto delas (o asset InputSystem_Actions, definido como as ações de todo o projeto), cujo mapa Player tem Move (WASD, as setas e o analógico esquerdo de um controle), Look (o mouse ou o analógico direito), Attack (o botão esquerdo do mouse e Enter), Interact (E, pressionada), Crouch (C), Jump (Espaço e o botão inferior do controle), Previous e Next (1 e 2) e Sprint (Shift esquerdo). Elas ficam ativadas desde o início, e InputSystem.actions.FindAction("Jump") obtém uma pelo nome. Este guindaste de garra com visão lateral se move nos eixos x e y e agarra ao pressionar Jump:
using UnityEngine;
using UnityEngine.InputSystem;
public class ClawCrane : MonoBehaviour
{
public float speed = 3f;
private InputAction moveAction;
private InputAction jumpAction;
void Start()
{
moveAction = InputSystem.actions.FindAction("Move");
jumpAction = InputSystem.actions.FindAction("Jump");
}
void Update()
{
Vector2 input = moveAction.ReadValue<Vector2>();
transform.position += new Vector3(input.x, input.y, 0f) * speed * Time.deltaTime;
if (jumpAction.WasPressedThisFrame())
Debug.Log("Grab!");
}
}As ações são encontradas uma vez, em Start, e mantidas em campos InputAction. Move fornece um Vector2: x corresponde à direita e à esquerda, y corresponde a cima e baixo nas teclas, e o vetor é normalizado, então W e D juntas fornecem (0.71, 0.71), em vez de (1, 1). Como a visão do guindaste é lateral, ele usa esse y para a altura; um jogo visto de cima usaria esse valor para z. As ações de botão respondem como as teclas: WasPressedThisFrame(), WasReleasedThisFrame() e IsPressed(). Dois erros causam problemas: um nome escrito incorretamente faz FindAction retornar null (uma NullReferenceException na primeira leitura), e ReadValue<Vector3>() em Move lança uma InvalidOperationException assim que uma tecla é pressionada, porque Move contém um Vector2.
Desafio
MédioO agrimensor mapeia um campo nevado, visto de cima, e carrega flags (3) para plantar pelo caminho. O script tem speed (4), flags, flagPrefab e uma lista planted. Use as ações do projeto:
- Move movimenta o agrimensor pelo campo nevado a
speedunidades por segundo: para a direita e para a esquerda ao longo do eixo x, para cima e para baixo ao longo do eixo z. - Cada pressionamento de Jump planta uma bandeira: uma cópia de
flagPrefabnas coordenadas x e z do agrimensor, em y 0.75, adicionada aplanted. Isso consome uma dasflagse registra quantas restam, comoFlags left: 2. Se não restarem bandeiras, Jump não planta nada. - Cada pressionamento de Attack (um clique com o botão esquerdo) desenterra a última bandeira plantada: ela é destruída e removida da lista,
flagsaumenta em um, e a mesma linha é registrada.
Pressione Play, plante três bandeiras e desenterre uma; em seguida, pressione Check.
Experimente você mesmo
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class Surveyor : MonoBehaviour
{
public float speed = 4f;
public int flags = 3;
public GameObject flagPrefab;
private List<GameObject> planted = new List<GameObject>();
void Start()
{
// encontre as ações Move, Jump e Attack
}
void Update()
{
// ande com Move, plante uma bandeira com Jump e retire uma com Attack
}
}
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