Ações de entrada
Parte da seção Criando Jogos de Verdade do Journey de Unity da Coddy. Lição 47 de 60.
Testar as teclas uma por uma vincula um script ao teclado. Uma ação dá nome ao que o jogador faz, e o projeto lista quais teclas, controles analógicos e botões a acionam. Um novo projeto Unity 6 já vem com um conjunto delas (o recurso InputSystem_Actions, definido como as ações de todo o projeto), cujo mapa Player tem Move (WASD, as setas e o controle analógico esquerdo de um gamepad), Look (o mouse ou o controle analógico direito), Attack (o botão esquerdo do mouse e Enter), Interact (E, mantida pressionada), Crouch (C), Jump (Space e o botão inferior do gamepad), Previous e Next (1 e 2) e Sprint (Left Shift). Elas são 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 com 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 armazenadas em campos InputAction. Move fornece um Vector2: x corresponde à direita e à esquerda, y corresponde a cima e baixo nas teclas, e o valor é normalizado; assim, W e D pressionadas juntas fornecem (0.71, 0.71) em vez de (1, 1). O guindaste tem visão lateral, então usa esse y como altura; um jogo visto de cima o usaria como z. As ações de botão respondem como as teclas: WasPressedThisFrame(), WasReleasedThisFrame() e IsPressed(). Dois erros causam exceções: um nome escrito incorretamente faz FindAction retornar null (uma NullReferenceException na primeira leitura), e ReadValue<Vector3>() em Move causa uma InvalidOperationException assim que uma tecla é pressionada, porque Move contém um Vector2.
Desafio
MédioMovimente o explorador e plante bandeiras usando as ações do projeto.
- Em
Start(), configuremoveAction,jumpActioneattackActioncomInputSystem.actions.FindAction("Move"),"Jump"e"Attack". - Em
Update(), movimente-se multiplicandomoveAction.ReadValue<Vector2>()porspeed, com o valor y no eixo z. - Chame
Plant()quandojumpAction.WasPressedThisFrame()ePullUp()ao pressionar Attack.
Pressione “Jogar”, plante três bandeiras e clique para retirar uma. Depois, “Verificar”.
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 InputAction moveAction;
private InputAction jumpAction;
private InputAction attackAction;
private List<GameObject> planted = new List<GameObject>();
void Start()
{
// encontre as ações Move, Jump e Attack
}
void Update()
{
// ande com Move, chame Plant() ao pressionar Jump e PullUp() ao pressionar Attack
}
void Plant()
{
if (flags == 0) return;
Vector3 spot = new Vector3(transform.position.x, 0.75f, transform.position.z);
planted.Add(Instantiate(flagPrefab, spot, Quaternion.identity));
flags--;
Debug.Log("Flags left: " + flags);
}
void PullUp()
{
if (planted.Count == 0) return;
GameObject last = planted[planted.Count - 1];
planted.RemoveAt(planted.Count - 1);
Destroy(last);
flags++;
Debug.Log("Flags left: " + flags);
}
}
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ímetro2Botõ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: Corrida sem Fim
Três FaixasObstáculos à Frente9O Novo Sistema de Entrada
Dois sistemas de entradaTeclado e mousePressionado neste quadroAções de entradaRecapitulação: troca de entradaPratique por conta própria: Playground de Unity