Listes d’objets
Fait partie de la section Les bases du scripting dans Unity du Journey Unity de Coddy. Leçon 51 sur 67.
Un tableau a une longueur fixe, définie lors de sa création. Un spawner ne sait pas à l’avance combien d’objets il va créer, alors il les garde dans une List<T> : un tableau C# qui s’agrandit. Elle se trouve dans System.Collections.Generic, et T est le type d’élément qu’elle contient. Cette fontaine se souvient de chaque pièce qu’elle crée :
using System.Collections.Generic;
using UnityEngine;
public class CoinFountain : MonoBehaviour
{
public GameObject coinPrefab;
List<GameObject> coins = new List<GameObject>();
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
GameObject coin = Instantiate(coinPrefab, transform.position, Quaternion.identity);
coins.Add(coin);
Debug.Log(coins.Count + " coins");
}
}
}Add ajoute un élément à la fin, et Count indique combien il y en a, alors qu’un tableau utilise Length. La lecture fonctionne comme avec un tableau : coins[0] est la première pièce, et foreach (GameObject c in coins) les parcourt toutes. coins.Remove(coin) retire cet élément et coins.RemoveAt(0) retire le premier ; les éléments qui le suivent avancent d’une place.
La liste elle-même doit être créée avec new. Un champ écrit sous la forme List<GameObject> coins; contient null, et le premier Add s’interrompt avec une NullReferenceException.
Défi
MoyenLe Stacker doit suivre les boîtes qu’il crée :
- Stocke les boîtes dans un champ privé
List<GameObject>nomméboxes. - Chaque clic fait apparaître une boîte sans rotation et l’ajoute à la liste. Une boîte est placée à la position du Stacker, plus 1.5 sur l’axe x pour chaque boîte déjà dans la liste : la première au niveau du Stacker, la suivante 1.5 à sa droite, et ainsi de suite.
- La barre d’espace retire la boîte la plus récente : masque-la avec
SetActive(false)et supprime-la de la liste. S’il n’y a aucune boîte, la barre d’espace ne fait rien. - Après chaque modification de la liste, affiche
Boxes:et le nombre de boîtes, par exempleBoxes: 3.
Appuie sur Play, clique et appuie sur la barre d’espace, puis clique sur Check.
Essayez vous-même
using UnityEngine;
public class BoxStacker : MonoBehaviour
{
public GameObject boxPrefab;
// boxes : une List<GameObject> privée
void Update()
{
// Clic : créer une boîte, 1.5 plus à droite pour chaque boîte de la liste, puis l’ajouter à la liste
// Espace : masquer la boîte la plus récente et la retirer de la liste
// Après chaque modification, afficher "Boxes: " et le nombre de boîtes dans le journal
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Les bases du scripting dans Unity
1Votre premier script
Bonjour, UnityPlacez le cubeBouger à chaque imageTourner chaque secondeDirigez avec les touchesRécapitulatif : conduisez le cube4Vecteurs
Addition de vecteursDirectionsEspaces local et mondeVitesse diagonaleDistance entre les objetsVector3 est une structRécapitulatif : pilote de drone7Projet : Attrape l’étoile
L’attrapeurUne étoile qui tombe2L’inspecteur
Champs de l’inspecteurSerializeFieldNombres flottants et MathfAttributs de l’inspecteurRécapitulatif : ascenseur5Transformations et hiérarchie
Parents et enfantsÉchelleRegarder les objetsSe déplacer vers un pointRécapitulatif : Lune en orbite8Rechercher des objets
Rechercher par nomTagsRechercher par typeLes références plutôt que FindLe null de UnityRécapitulatif : la pièce la plus proche11Projet : Esquivez les blocs
Le coureurBlocs qui tombent6GameObjects et composants
Références dans l’InspectorObtenir un composantComposants manquantsAjouter un composantRequireComponentAfficher et masquerRécapitulatif : interrupteur9Prefabs et apparition d’objets
Prefabs et instanciationFaire apparaître des objets avec un minuteurFaire apparaître des objets dans une grilleListes d’objetsDétruireApparitions aléatoiresRécapitulatif : feux d’artifice