Menu
CoddyTech

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.

challenge icon

Sfida

Facile

Mostra il dialogo tra Mira e Tom una battuta alla volta.

  1. Dichiara una classe [System.Serializable] Line con le stringhe pubbliche speaker e text, e aggiungi public List<Line> lines;.
  2. All'avvio, mostra lines[0]: il suo interlocutore in speakerText, il suo testo in lineText.
  3. La barra spaziatrice mostra la battuta successiva, fino a lines.Count. Dopo l'ultima, nascondi box e registra Dialogue 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

Esercitati da solo: Playground Unity