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.
Défi
FacileMira 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
Lineavec deux chaînes publiques,speakerettext, que l’Inspector peut afficher, et ajoute à Dialogue uneList<Line>publique nomméelines. - Au démarrage, la boîte affiche la première ligne : son locuteur dans
speakerTextet son texte danslineText. - 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 overdans 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
}
}
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
1Des composants, pas des hiérarchies
Des composants simplesUn script de base pour les ennemisDes composants abstraitsDes composants qui fonctionnent ensembleRécapitulatif : tourelle modulaire4Données sérialisées
Classes sérialisablesListes dans l’inspecteurÉnumérations dans l’inspecteurRécapitulatif : table de butin7Machines à états
Les états sous forme de classesUne machine à étatsTransitionsLes cerveaux des ennemisRécapitulatif : états d’une porte10Projet : Survivant de l’arène
Le hérosTypes d’ennemis2Interfaces dans Unity
IDamageableInterfaces et TryGetComponentGetComponentsRécapitulatif : touche d’interaction5ScriptableObjects
Assets de donnéesStatistiques des armesParamètres partagésLes vagues sous forme de donnéesRécapitulatif : base de données d’objets