Menu
CoddyTech

Listes d’objets

Fait partie de la section Les bases du scripting dans Unity du Journey Unity de Coddy. Leçon 65 sur 85.

Un tableau a une longueur fixe, définie lors de sa création. Un générateur ne sait pas à l’avance combien d’objets il va créer ; il les conserve donc dans une List<T> : le tableau extensible de C#. Il se trouve dans System.Collections.Generic, et T est le type des éléments qu’il contient. Cette fontaine mémorise 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, tandis 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 déclaré comme List<GameObject> coins; contient null, et le premier Add s’arrête en déclenchant une NullReferenceException.

challenge icon

Défi

Moyen

Fais en sorte que chaque clic ajoute une boîte à une liste.

  1. Ajoute using System.Collections.Generic; et le champ List<GameObject> boxes = new List<GameObject>();.
  2. Lors d’un clic, instancie boxPrefab à la position transform.position + new Vector3(boxes.Count * 1.5f, 0, 0), sans rotation, puis ajoute-la à boxes.
  3. Affiche dans le journal "Boxes: " + boxes.Count.

Appuie sur « Jouer » et clique trois fois : trois boîtes s’alignent. Puis appuie sur « Vérifier ».

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, l’ajouter à la liste et afficher le nombre dans le journal
    }
}

Toutes les leçons de Les bases du scripting dans Unity

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