Acciones de entrada
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 47 de 60.
Probar las teclas una por una vincula un script al teclado. Una acción nombra lo que hace el jugador, y el proyecto indica qué teclas, palancas y botones la activan. Un proyecto nuevo de Unity 6 incluye un conjunto de acciones (el recurso InputSystem_Actions, configurado 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 (Espacio y el botón inferior del mando), Previous y Next (1 y 2) y Sprint (Shift izquierdo). Están activadas desde el principio, y InputSystem.actions.FindAction("Jump") obtiene una por nombre. Esta grúa de garra con vista lateral 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 InputAction. Move proporciona 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 desde un 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 provoca una InvalidOperationException en cuanto se mantiene pulsada una tecla, porque Move contiene un Vector2.
Desafío
IntermedioHaz que el topógrafo camine y plante banderas con las acciones del proyecto.
- En
Start(), asigna valores amoveAction,jumpActionyattackActionconInputSystem.actions.FindAction("Move"),"Jump"y"Attack". - En
Update(), haz que camine multiplicandomoveAction.ReadValue<Vector2>()porspeed, usando su eje y para z. - Llama a
Plant()cuando se cumplajumpAction.WasPressedThisFrame()y aPullUp()al pulsar Attack.
Pulsa «Jugar», planta tres banderas y haz clic para retirar una. Después, pulsa «Comprobar».
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 InputAction moveAction;
private InputAction jumpAction;
private InputAction attackAction;
private List<GameObject> planted = new List<GameObject>();
void Start()
{
// busca las acciones Move, Jump y Attack
}
void Update()
{
// camina con Move, ejecuta Plant() al pulsar Jump y PullUp() al pulsar 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 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ímetro2Botones 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 sin fin
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entradaPractica por tu cuenta: Playground de Unity