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.
Défi
FacileAffiche le dialogue de Mira et Tom une ligne à la fois.
- Déclare une classe
[System.Serializable]Lineavec les chaînes publiquesspeakerettext, et ajoutepublic List<Line> lines;. - Au démarrage, affiche
lines[0]: son locuteur dansspeakerText, son texte danslineText. - La barre d’espace affiche la ligne suivante, jusqu’à
lines.Count. Après la dernière ligne, masqueboxet afficheDialogue overdans 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
1Des composants, pas des hiérarchies
De petits composantsUn script de base pour les ennemisComposants abstraitsDes composants qui fonctionnent ensembleRécapitulatif : tourelle modulaireRécapitulatif : canon double4Données sérialisées
Classes sérialisablesListes dans l’InspecteurÉnumérations dans l’InspecteurRécapitulatif : table de butinRécapitulatif : tirer le butin2Les interfaces dans Unity
IDamageableInterfaces et TryGetComponentGetComponentsRécapitulatif : touche d’interactionLe plus proche à portée5ScriptableObjects
Ressources de donnéesStatistiques des armesParamètres partagésSauver le ventLes vagues comme donnéesRécapitulatif : base de données des objetsRécapitulatif : acheter dans la boutique3Événements
Les événements C# dans UnityS’abonner dans OnEnableChamps UnityEventLes événements pilotent l’interfaceRécapitulatif : fenêtre de succèsRécapitulatif : minuteur de la fenêtreEntraînez-vous par vous-même : Playground Unity