Listas en el Inspector
Parte de la sección Arquitectura de juegos en Unity del Journey de Unity de Coddy. Lección 16 de 50.
Una lista de entradas [System.Serializable] es una tabla que rellenas en el Inspector. Este guardia recorre una ruta de paradas y espera en cada una mientras su entrada indique:
[System.Serializable]
public class Stop
{
public Transform point;
public float wait = 1f;
}
public class Patrol : MonoBehaviour
{
public float speed = 3f;
public List<Stop> stops;
private int current;
private float waited;
void Update()
{
Stop stop = stops[current];
transform.position = Vector3.MoveTowards(transform.position, stop.point.position, speed * Time.deltaTime);
if (transform.position != stop.point.position) return;
waited += Time.deltaTime;
if (waited >= stop.wait)
{
waited = 0f;
current = (current + 1) % stops.Count;
}
}
}El Inspector muestra Stops con su cantidad y un desplegable por entrada: Element 0, Element 1 y así sucesivamente, cada uno con un Point y un Wait. El botón + añade una entrada, el botón menos elimina la seleccionada y el control a la izquierda de una fila permite arrastrarla a un nuevo lugar de la ruta. El código lee la lista como de costumbre: stops.Count entradas, stops[current].point y (current + 1) % stops.Count vuelve a la primera parada después de la última. Un diseñador de niveles puede asignarle tres paradas a un guardia y diez a otro sin tocar el script.
Un array, public Stop[] stops;, se muestra de la misma manera. El botón + de Unity copia la última entrada, así que una nueva parada comienza con el mismo punto y tiempo de espera que la anterior. Unity no muestra ni guarda una lista de listas, como List<List<Stop>>, ni un Dictionary. En su lugar, envuelve la lista interna en una clase [Serializable], como Route con su propia List<Stop>, y mantén una lista de esas clases.
Desafío
FácilMira y Tom están atrapados junto a un puente roto. Escribe el cuadro de diálogo en Dialogue.cs, en el HUD. La escena enlaza box, speakerText y lineText, y tiene la conversación lista para una lista llamada lines.
- Declara una clase
Linecon dos cadenas públicas,speakerytext, que el Inspector pueda mostrar, y dale a Dialogue unaList<Line>pública llamadalines. - Al inicio, el cuadro muestra la primera línea: su interlocutor en
speakerTexty su texto enlineText. - Cada vez que pulses Espacio se muestra la siguiente línea. Una conversación puede tener cualquier número de líneas, así que usa el recuento de la lista.
- Si pulsas Espacio en la última línea, se oculta el cuadro y se registra
Dialogue over. Después, Espacio no hace nada.
Pulsa Play, lee la conversación con Espacio y luego pulsa Check.
Pruébalo tú mismo
using UnityEngine;
using TMPro;
public class Dialogue : MonoBehaviour
{
public GameObject box;
public TMP_Text speakerText;
public TMP_Text lineText;
void Start()
{
// muestra la primera línea
}
void Update()
{
// Space: la siguiente línea o el final de la conversación
}
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Arquitectura de juegos en Unity
1Componentes, no jerarquías
Componentes pequeñosUn script base para enemigosComponentes abstractosComponentes que trabajan juntosRepaso: torreta modular4Datos serializados
Clases serializablesListas en el InspectorEnumeraciones en el InspectorRepaso: tabla de botín7Máquinas de estados
Estados como clasesUna máquina de estadosTransicionesCerebros de enemigosRepaso: estados de puertas10Proyecto: Superviviente de la arena
El héroeTipos de enemigos2Interfaces en Unity
IDamageableInterfaces y TryGetComponentGetComponentsRepaso: tecla de interacción5ScriptableObjects
Recursos de datosEstadísticas de armasConfiguración compartidaOleadas como datosRepaso: base de datos de objetos