Liste nell'Inspector
Fa parte della sezione Architettura dei giochi in Unity del percorso Unity di Coddy. Lezione 16 di 50.
Un elenco di voci [System.Serializable] è una tabella che compili nell'Inspector. Questa guardia percorre un itinerario di fermate e si ferma a ciascuna per il tempo indicato dalla sua voce:
[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;
}
}
}Nell'Inspector, Stops mostra il numero di elementi e una sezione espandibile per ogni voce: Element 0, Element 1 e così via, ciascuna con un Point e un Wait. Il pulsante + aggiunge una voce, il pulsante meno rimuove quella selezionata e la maniglia a sinistra di una riga permette di trascinarla in un'altra posizione nell'itinerario. Il codice legge l'elenco come al solito: stops.Count voci, stops[current].point e (current + 1) % stops.Count riportano alla prima fermata dopo l'ultima. Chi progetta i livelli può assegnare a una guardia tre fermate e a un'altra dieci senza modificare lo script.
Un array, public Stop[] stops;, viene mostrato allo stesso modo. Il pulsante + di Unity copia l'ultima voce, quindi una nuova fermata inizia con lo stesso point e wait di quella sopra. Unity non mostra né salva un elenco di elenchi, come List<List<Stop>>, o un Dictionary. Invece, racchiudi l'elenco interno in una classe [Serializable], come Route con il proprio List<Stop>, e crea un elenco di queste classi.
Sfida
FacileMira e Tom sono bloccati davanti a un ponte rotto. Scrivi la casella di dialogo in Dialogue.cs, sull'HUD. La scena collega box, speakerText e lineText, e ha già pronta la conversazione per una lista chiamata lines.
- Dichiara una classe
Linecon due stringhe pubbliche,speakeretext, visibili nell'Inspector, e assegna a Dialogue unaList<Line>pubblica chiamatalines. - All'inizio la casella mostra la prima riga: il suo interlocutore in
speakerTexte il suo testo inlineText. - Ogni pressione della barra spaziatrice mostra la riga successiva. Una conversazione può avere un numero qualsiasi di righe, quindi usa il conteggio della lista.
- Premendo la barra spaziatrice sull'ultima riga, la casella si nasconde e viene registrato
Dialogue over. Dopodiché, premere la barra spaziatrice non fa nulla.
Premi Gioca, leggi la conversazione con la barra spaziatrice, poi premi Verifica.
Provalo tu
using UnityEngine;
using TMPro;
public class Dialogue : MonoBehaviour
{
public GameObject box;
public TMP_Text speakerText;
public TMP_Text lineText;
void Start()
{
// mostra la prima battuta
}
void Update()
{
// Space: la battuta successiva o la fine della conversazione
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Architettura dei giochi in Unity
1Componenti, non gerarchie
Componenti piccoliUno script base per i nemiciComponenti astrattiComponenti che collaboranoRiepilogo: torretta modulare4Dati serializzati
Classi serializzabiliListe nell'InspectorEnum nell'InspectorRiepilogo: tabella del bottino7Macchine a stati
Gli stati come classiUna macchina a statiTransizioniIntelligenze dei nemiciRiepilogo: stati della porta10Progetto: Sopravvissuto nell’arena
L’eroeTipi di nemici5ScriptableObjects
Asset di datiStatistiche delle armiImpostazioni condiviseOndate come datiRiepilogo: database degli oggetti