Menu
CoddyTech

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.

challenge icon

Défi

Moyen

Le 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 exemple Boxes: 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
    }
}
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 Les bases du scripting dans Unity