Listas en el Inspector
Parte de la sección Arquitectura de juegos en Unity del Journey de Unity de Coddy. Lección 19 de 64.
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 controlador situado a la izquierda de una fila permite arrastrarla a otro 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 empieza con el mismo punto y tiempo de espera que la entrada anterior. Unity no muestra ni guarda una lista de listas, como List<List<Stop>>, ni un Dictionary. En su lugar, incluye la lista interna en una clase [Serializable], como una Route con su propia List<Stop>, y mantén una lista de esas clases.
Desafío
FácilMuestra la conversación de Mira y Tom una línea a la vez.
- Declara una clase
[System.Serializable]llamadaLinecon las cadenas públicasspeakerytext, y añadepublic List<Line> lines;. - Al inicio, muestra
lines[0]: su hablante enspeakerTexty su texto enlineText. - La barra espaciadora muestra la línea siguiente, hasta llegar a
lines.Count. Después de la última, ocultaboxy registraDialogue over; después, la barra espaciadora no hace nada.
Pulsa «Jugar» y lee usando la barra espaciadora. Después, pulsa «Comprobar».
Pruébalo tú mismo
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
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
}
}
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 modularRepaso: cañón doble4Datos serializados
Clases serializablesListas en el InspectorEnumeraciones en el InspectorRepaso: tabla de botínRepaso: sortear el botín2Interfaces en Unity
IDamageableInterfaces y TryGetComponentGetComponentsRepaso: Tecla de interacciónRepaso: El más cercano al alcance5ScriptableObjects
Activos de datosEstadísticas de armasConfiguración compartidaGuardar el vientoOleadas como datosRepaso: base de datos de objetosRepaso: comprar en la tienda3Eventos
Eventos de C# en UnitySuscribirse en OnEnableCampos UnityEventLos eventos controlan la interfazRepaso: ventana emergente de logrosRepaso: temporizador de la ventana emergentePractica por tu cuenta: Playground de Unity