Menu
CoddyTech

Listas no Inspector

Parte da seção Arquitetura de jogos no Unity do Journey de Unity da Coddy. Lição 16 de 50.

Uma lista de entradas [System.Serializable] é uma tabela que você preenche no Inspector. Este guarda percorre uma rota de paradas e espera em cada uma pelo tempo indicado na entrada:

[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;
        }
    }
}

O Inspector mostra Stops com sua quantidade e uma seção expansível para cada entrada, Element 0, Element 1 e assim por diante, cada uma com um Point e um Wait. O botão + adiciona uma entrada, o botão de menos remove a selecionada e a alça à esquerda de uma linha permite arrastá-la para outro lugar da rota. O código lê a lista como de costume: stops.Count entradas, stops[current].point e (current + 1) % stops.Count voltam à primeira parada depois da última. Uma pessoa que projeta níveis pode dar três paradas a um guarda e dez a outro sem tocar no script.

Um array, public Stop[] stops;, é exibido da mesma forma. O botão + do Unity copia a última entrada, então uma nova parada começa com o mesmo ponto e tempo de espera da entrada acima. O Unity não exibe nem salva uma lista de listas, como List<List<Stop>>, ou um Dictionary. Em vez disso, envolva a lista interna em uma classe [Serializable], como uma Route com sua própria List<Stop>, e mantenha uma lista dessas classes.

challenge icon

Desafio

Fácil

Mira e Tom estão presos em uma ponte quebrada. Escreva a caixa de diálogo em Dialogue.cs, no HUD. A cena vincula box, speakerText e lineText, e já tem a conversa pronta para uma lista chamada lines.

  • Declare uma classe Line com duas strings públicas, speaker e text, que o Inspector possa exibir, e dê a Dialogue uma List<Line> pública chamada lines.
  • No início, a caixa mostra a primeira fala: o nome de quem fala em speakerText e o texto em lineText.
  • Cada vez que Space for pressionado, a próxima fala é exibida. Uma conversa pode ter qualquer número de falas, então use a quantidade de itens da lista.
  • Pressionar Space na última fala oculta a caixa e registra Dialogue over. Depois disso, Space não faz nada.

Pressione Play, leia a conversa usando Space e, em seguida, Check.

Experimente você mesmo

using UnityEngine;
using TMPro;

public class Dialogue : MonoBehaviour
{
    public GameObject box;
    public TMP_Text speakerText;
    public TMP_Text lineText;

    void Start()
    {
        // mostra a primeira fala
    }

    void Update()
    {
        // Space: a próxima fala ou o fim da conversa
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Arquitetura de jogos no Unity