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.
Défi
MoyenFais en sorte que chaque clic ajoute une boîte à une liste.
- Ajoute
using System.Collections.Generic;et le champList<GameObject> boxes = new List<GameObject>();. - Lors d’un clic, instancie
boxPrefabà la positiontransform.position + new Vector3(boxes.Count * 1.5f, 0, 0), sans rotation, puis ajoute-la àboxes. - 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
1Les bases de C# dans Unity
Bonjour, UnityVariablesLes nombres décimaux ont besoin d’un fDu texte dans la consoleDes variables qui mémorisentSi et sinonComparer des nombresRécapitulatif : le collecteur de pièces7Boucles et méthodes
Répéter avec forBoucles imbriquéesÉcrire une méthodeMéthodes qui renvoient une réponseTableauxRécapitulatif : escalier10Rechercher des objets
Rechercher par nomTagsRechercher par typeLes références plutôt que la rechercheLe null de UnityRécapitulatif : la pièce la plus proche13Projet : Éviter les blocs
Le coureurDes blocs tombent du ciel2Mettez-le en mouvement
Placez le cubeDéplacez-le à chaque frameTournez chaque secondeDirigez avec les touchesRécapitulatif : pilotez le cube5Vecteurs
Additionner des vecteursDirectionsEspace local et espace globalVitesse diagonaleDistance entre des objetsVector3 est une structureRécapitulatif : pilote de drone8GameObjects et composants
Références dans l’InspectorObtenir un composantComposants manquantsAjouter un composantRequireComponentAfficher et masquerRécapitulatif : interrupteur11Prefabs et création d’objets
Prefabs et instanciationCréer des objets avec un minuteurCréer des objets sur une grilleListes d’objetsRécupérer le plus récentDétruireCréations aléatoiresRécapitulatif : feux d’artifice3L’inspecteur
Champs de l’inspecteurSerializeFieldFlottants et MathfAttributs de l’inspecteurRécapitulatif : ascenseur6Transformations et hiérarchie
Parents et enfantsHissez le drapeauÉchelleRegarder les objetsSe déplacer vers un pointRécapitulatif : la lune en orbite9Projet : Attrape l’étoile
Le receveurUne étoile filanteEntraînez-vous par vous-même : Playground Unity