Menu
CoddyTech

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.

challenge icon

Desafío

Fácil

Muestra la conversación de Mira y Tom una línea a la vez.

  1. Declara una clase [System.Serializable] llamada Line con las cadenas públicas speaker y text, y añade public List<Line> lines;.
  2. Al inicio, muestra lines[0]: su hablante en speakerText y su texto en lineText.
  3. La barra espaciadora muestra la línea siguiente, hasta llegar a lines.Count. Después de la última, oculta box y registra Dialogue 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

Practica por tu cuenta: Playground de Unity