Menu
CoddyTech

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.

challenge icon

Desafío

Fácil

Mira 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 Line con dos cadenas públicas, speaker y text, que el Inspector pueda mostrar, y dale a Dialogue una List<Line> pública llamada lines.
  • Al inicio, el cuadro muestra la primera línea: su interlocutor en speakerText y su texto en lineText.
  • 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
    }
}
quiz iconPonte a prueba

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