Listas no Inspector
Parte da seção Arquitetura de Jogos no Unity do Journey de Unity da Coddy. Lição 19 de 64.
Uma lista de entradas [System.Serializable] é uma tabela que você preenche no Inspector. Esse guarda percorre uma rota com várias 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 Point e Wait. O botão + adiciona uma entrada, o botão de menos remove a entrada selecionada, e a alça à esquerda de uma linha permite arrastá-la para outro lugar na rota. O código lê a lista como de costume: stops.Count entradas, stops[current].point, e (current + 1) % stops.Count volta para a primeira parada depois da última. Um designer de fases pode atribuir 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>>, nem um Dictionary. Em vez disso, encapsule a lista interna em uma classe [Serializable], como uma Route com sua própria List<Stop>, e mantenha uma lista dessas classes.
Desafio
FácilMostre a conversa de Mira e Tom uma linha de cada vez.
- Declare uma classe
[System.Serializable]Linecom as strings públicasspeakeretext, e adicionepublic List<Line> lines;. - No início, mostre
lines[0]: o interlocutor emspeakerText, o texto emlineText. - A tecla Espaço mostra a próxima linha, até
lines.Count. Depois da última, oculteboxe registreDialogue over; então, pressionar Espaço não faz nada.
Pressione “Jogar” e leia usando a tecla Espaço. Depois, pressione “Verificar”.
Experimente você mesmo
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()
{
// mostra a primeira fala
}
void Update()
{
// Space: a próxima fala ou o fim da conversa
}
}
Todas as lições de Arquitetura de Jogos no Unity
1Componentes, não hierarquias
Componentes pequenosUm script base de inimigoComponentes abstratosComponentes trabalhando juntosRevisão: torre modularRevisão: canhão duplo4Dados Serializados
Classes SerializáveisListas no InspectorEnums no InspectorRevisão: Tabela de LootRevisão: Sorteie o Loot2Interfaces no Unity
IDamageableInterfaces e TryGetComponentGetComponentsRevisão: tecla de interaçãoRevisão: mais próximo ao alcance5ScriptableObjects
Ativos de DadosAtributos da ArmaConfigurações CompartilhadasSalve o VentoOndas como DadosRevisão: Banco de ItensRevisão: Comprar na LojaPratique por conta própria: Playground de Unity