Menu
CoddyTech

Listes dans l’inspecteur

Fait partie de la section Architecture de jeu dans Unity du Journey Unity de Coddy. Leçon 16 sur 50.

Une liste d’entrées [System.Serializable] est un tableau que tu remplis dans l’Inspecteur. Ce garde parcourt un itinéraire composé d’arrêts et attend à chacun d’eux aussi longtemps que l’indique son entrée :

[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;
        }
    }
}

L’Inspecteur affiche Stops avec son nombre d’entrées et un volet dépliant par entrée — Élément 0, Élément 1, et ainsi de suite — contenant chacun un Point et un Wait. Le bouton + ajoute une entrée, le bouton moins supprime celle qui est sélectionnée, et la poignée à gauche d’une ligne permet de la faire glisser vers un nouvel emplacement dans l’itinéraire. Le code lit la liste comme d’habitude : stops.Count entrées, stops[current].point, et (current + 1) % stops.Count revient au premier arrêt après le dernier. Un concepteur de niveau peut attribuer trois arrêts à un garde et dix à un autre sans toucher au script.

Un tableau, public Stop[] stops;, s’affiche de la même manière. Le bouton + de Unity copie la dernière entrée, donc un nouvel arrêt reprend le même point et le même temps d’attente que celui qui le précède. Unity n’affiche ni n’enregistre une liste de listes, comme List<List<Stop>>, ni un dictionnaire. Enveloppe plutôt la liste interne dans une classe [Serializable], par exemple une classe Route qui possède sa propre List<Stop>, et conserve une liste de ces classes.

challenge icon

Défi

Facile

Mira et Tom sont bloqués devant un pont endommagé. Crée la boîte de dialogue dans Dialogue.cs, sur le HUD. La scène relie box, speakerText et lineText, et la conversation est prête dans une liste nommée lines.

  • Déclare une classe Line avec deux chaînes publiques, speaker et text, que l’Inspector peut afficher, et ajoute à Dialogue une List<Line> publique nommée lines.
  • Au démarrage, la boîte affiche la première ligne : son locuteur dans speakerText et son texte dans lineText.
  • Chaque pression sur Espace affiche la ligne suivante. Une conversation peut comporter autant de lignes que nécessaire : base-toi donc sur le nombre d’éléments de la liste.
  • Appuyer sur Espace sur la dernière ligne masque la boîte et affiche Dialogue over dans les journaux. Ensuite, la barre d’espace ne fait rien.

Appuie sur Play, lis la conversation avec la barre d’espace, puis clique sur Check.

Essayez vous-même

using UnityEngine;
using TMPro;

public class Dialogue : MonoBehaviour
{
    public GameObject box;
    public TMP_Text speakerText;
    public TMP_Text lineText;

    void Start()
    {
        // afficher la première réplique
    }

    void Update()
    {
        // Space : la réplique suivante ou la fin de la conversation
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Architecture de jeu dans Unity