Elenchi nell'Inspector
Fa parte della sezione Architettura dei giochi in Unity del percorso Unity di Coddy. Lezione 19 di 64.
Un elenco di voci [System.Serializable] è una tabella da compilare nell'Inspector. Questa guardia percorre un itinerario di fermate e attende in ciascuna per il tempo indicato dalla 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 conteggio e un riquadro espandibile per ogni voce, Element 0, Element 1 e così via, ciascuno 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 dell'itinerario. Il codice legge l'elenco come al solito: stops.Count voci, stops[current].point e (current + 1) % stops.Count torna 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, così 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 suo List<Stop>, e mantieni un elenco di queste classi.
Sfida
FacileMostra il dialogo tra Mira e Tom una battuta alla volta.
- Dichiara una classe
[System.Serializable]Linecon le stringhe pubblichespeakeretext, e aggiungipublic List<Line> lines;. - All'avvio, mostra
lines[0]: il suo interlocutore inspeakerText, il suo testo inlineText. - La barra spaziatrice mostra la battuta successiva, fino a
lines.Count. Dopo l'ultima, nascondiboxe registraDialogue over; poi la barra spaziatrice non fa nulla.
Premi «Gioca» e leggi usando la barra spaziatrice. Poi premi «Verifica».
Provalo tu
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 la prima battuta
}
void Update()
{
// Space: la battuta successiva, oppure la fine della conversazione
}
}
Tutte le lezioni di Architettura dei giochi in Unity
1Componenti, non gerarchie
Componenti piccoliUno script base per i nemiciComponenti astrattiComponenti che collaboranoRipasso: torretta modulareRipasso: cannone doppio4Dati serializzati
Classi serializzabiliElenchi nell'InspectorEnum nell'InspectorRiepilogo: tabella del bottinoRiepilogo: tira il bottino2Interfacce in Unity
IDamageableInterfacce e TryGetComponentGetComponentsRiepilogo: tasto InteragisciRiepilogo: il più vicino a portata5ScriptableObjects
Asset di datiStatistiche delle armiImpostazioni condiviseSalva il ventoOnde come datiRiepilogo: database degli oggettiRiepilogo: comprare dal negozioEsercitati da solo: Playground Unity