Menu
CoddyTech

Listes dans l’Inspecteur

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

Une liste d'entrées [System.Serializable] est un tableau que tu remplis dans l'Inspector. Ce garde parcourt un itinéraire composé d'étapes et attend à chacune d'elles tant que son entrée indique :

[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'Inspector affiche Stops avec son nombre d'entrées et un volet dépliant par entrée — Element 0, Element 1, etc. — chacun contenant 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 autre emplacement de l'itinéraire. Le code lit la liste comme d'habitude : stops.Count entrées, stops[current].point, et (current + 1) % stops.Count permet de revenir à la première étape après la dernière. Un concepteur de niveaux peut attribuer trois étapes à un garde et dix à un autre sans toucher au script.

Un tableau, public Stop[] stops;, s'affiche de la même façon. Le bouton + de Unity copie la dernière entrée : une nouvelle étape commence donc avec le même point et le même temps d'attente que celle qui la précède. Unity n'affiche ni n'enregistre une liste de listes, telle que List<List<Stop>>, ni un Dictionary. À la place, encapsule la liste interne dans une classe [Serializable], par exemple une Route contenant sa propre List<Stop>, et conserve une liste de ces objets.

challenge icon

Défi

Facile

Affiche le dialogue de Mira et Tom une ligne à la fois.

  1. Déclare une classe [System.Serializable] Line avec les chaînes publiques speaker et text, et ajoute public List<Line> lines;.
  2. Au démarrage, affiche lines[0] : son locuteur dans speakerText, son texte dans lineText.
  3. La barre d’espace affiche la ligne suivante, jusqu’à lines.Count. Après la dernière ligne, masque box et affiche Dialogue over dans le journal ; ensuite, la barre d’espace ne fait rien.

Appuie sur « Jouer » et lis en appuyant sur la barre d’espace. Puis clique sur « Vérifier ».

Essayez vous-même

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()
    {
        // afficher la première ligne
    }

    void Update()
    {
        // Space : la ligne suivante ou la fin de la conversation
    }
}

Toutes les leçons de Architecture de jeu dans Unity

Entraînez-vous par vous-même : Playground Unity