Acciones de entrada
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 46 de 56.
Probar las teclas una por una vincula un script al teclado. Una acción nombra lo que hace el jugador, y el proyecto enumera qué teclas, palancas y botones la activan. Un proyecto nuevo de Unity 6 incluye un conjunto de ellas (el recurso InputSystem_Actions, establecido como las acciones de todo el proyecto), cuyo mapa Player tiene Move (WASD, las flechas y la palanca izquierda de un mando), Look (el ratón o la palanca derecha), Attack (el botón izquierdo del ratón y Enter), Interact (E, mantenida), Crouch (C), Jump (Space y el botón sur del mando), Previous y Next (1 y 2) y Sprint (Left Shift). Están activadas desde el principio, y InputSystem.actions.FindAction("Jump") obtiene una por su nombre. Esta grúa de garra vista de lado se mueve en x e y y agarra al pulsar 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!");
}
}Las acciones se buscan una sola vez, en Start, y se guardan en campos de tipo InputAction. Move devuelve un Vector2: x es derecha e izquierda, y es arriba y abajo en las teclas, y está normalizado, así que W y D juntas dan (0.71, 0.71) en lugar de (1, 1). La grúa se ve de lado, así que usa esa y para la altura; un juego visto desde arriba la usaría para z. Las acciones de botón responden como las teclas: WasPressedThisFrame(), WasReleasedThisFrame() e IsPressed(). Dos errores provocan excepciones: un nombre mal escrito hace que FindAction devuelva null (una NullReferenceException en la primera lectura), y ReadValue<Vector3>() en Move lanza una InvalidOperationException en cuanto se mantiene pulsada una tecla, porque Move contiene un Vector2.
Desafío
IntermedioEl topógrafo cartografía un campo nevado visto desde arriba y lleva flags (3) para plantarlas por el camino. El script tiene speed (4), flags, flagPrefab y una lista planted. Usa las acciones del proyecto:
- Move hace que el topógrafo camine por la nieve a
speedunidades por segundo: a la derecha y a la izquierda a lo largo del eje x, y hacia arriba y hacia abajo a lo largo del eje z. - Cada vez que se pulsa Jump, se planta una bandera: una copia de
flagPrefaben las coordenadas x y z del topógrafo, a una altura y de 0.75, que se añade aplanted. Se consume una de lasflagsy se registra cuántas quedan, por ejemplo,Flags left: 2. Si no quedan banderas, Jump no planta ninguna. - Cada vez que se pulsa Attack (un clic izquierdo), se retira la última bandera plantada: se destruye y se quita de la lista,
flagsaumenta en uno y se registra la misma línea.
Pulsa Play, planta tres banderas y retira una; después, pulsa Check.
Pruébalo tú mismo
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()
{
// busca las acciones Move, Jump y Attack
}
void Update()
{
// camina con Move, planta una bandera con Jump y arranca una con Attack
}
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Creación de juegos reales
1Texto en pantalla
Canvas y textoMuestra la puntuaciónDa formato a los númerosUn temporizador de cuenta regresivaRepaso: velocímetro4Escenas y niveles
Cargar una escenaReiniciar el nivelSiguiente nivelConservar entre escenasRepaso: selección de nivel10Proyecto: plataformas 3D
El recorridoPlataformas móviles2Botones y pantallas
Botones y onClickLambdasConectar en el InspectorPaneles activados y desactivadosBarras de saludRepaso: tienda de mejoras5Guardar con PlayerPrefs
Guardar un númeroCargar con un valor predeterminadoPuntuación más altaGuardar ajustesRepaso: monedas en el banco3El gestor del juego
Un solo script ejecuta el juegoEl SingletonEstados del juegoActivar el estadoRepaso: gestor de rondas6Proyecto: corredor infinito
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entrada