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.
Desafio
FácilMira 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
Linecom duas strings públicas,speakeretext, que o Inspector possa exibir, e dê a Dialogue umaList<Line>pública chamadalines. - No início, a caixa mostra a primeira fala: o nome de quem fala em
speakerTexte o texto emlineText. - 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
}
}
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
1Componentes, não hierarquias
Componentes pequenosUm script-base para inimigosComponentes abstratosComponentes trabalhando juntosRevisão: Torre modular4Dados Serializados
Classes SerializáveisListas no InspectorEnums no InspectorRevisão: Tabela de Loot7Máquinas de Estados
Estados como ClassesUma Máquina de EstadosTransiçõesInteligências dos InimigosRevisão: Estados da Porta10Projeto: Sobrevivente da Arena
O HeróiTipos de Inimigos5ScriptableObjects
Assets de dadosAtributos das armasConfigurações compartilhadasOndas como dadosRevisão: banco de dados de itens