Address
304 North Cardinal St.
Dorchester Center, MA 02124

Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM

Unity list remove

Unity – Suppression d’un élément d’une liste

Sur Unity, il y a plusieurs fonctions permettant de supprimer un élément provenant d’une liste.
Ces méthodes utilisées fonctionnent aussi pour tout type de projet en C#.

Suppression d’un élément avec Remove

Pour supprimer un élément d’une liste sur Unity, on utilise la méthode Remove en passant en argument l’élément à supprimer.

Lorsque l’élément est présent et supprimé de la liste, la fonction renvoie true.

using System.Collections.Generic;
using UnityEngine;

public class TrackerMonoBehaviour : MonoBehaviour
{
    public List<GameObject> trackGameObjects = new List<GameObject>();

    public void StopSelfTracking()
    {
        if (trackGameObjects.Remove(gameObject))
        {
            // Success Remove Tracking
        }
    }
}
    

Pour rappel : l’élément passé en argument doit être du même type que la liste ou d’un type enfant.

Pour plus d’informations sur les listes, veuillez consulter : Unity List Collection: Guide complet

Conséquences de la suppression d’un élément dans une liste

Il est important de noter que les listes ne fonctionnent pas comme les dictionnaires.
Si un élément est supprimé, les index sont ajustés.

Par exemple, supprimer l’élément à l’index 0 modifie les index suivants : (1 devient 0, 2 devient 1, etc.).

Il n’est pas conseillé de supprimer des éléments tout en bouclant dans la liste, cela pourrait entraîner des erreurs ou des incohérences.
Il peut être plus sage de cloner la liste en amont ou d’utiliser RemoveAll.

Suppression d’un élément d’une liste par index

Un élément peut aussi être supprimé via son index, en utilisant la méthode RemoveAt et en passant l’index en argument.
Pour rappel : l’index dans les listes commence à 0.

var ints = new List<int>() { 5, 4, 2 };

// remove first element
ints.RemoveAt(0);
    

Note : il est conseillé, lors de la suppression d’un élément par index, de tester avant si l’index est présent dans la liste via Count.

On veut éviter les erreurs « index out of range« .

Petit tips: Supprimer le dernier élément

Un tips très utile lorsque vous souhaitez supprimer le dernier élément d’une liste ou d’un tableau :

On commence par récupérer l’index du dernier élément en utilisant Count tout en le soustrayant de 1 : int lastIndex = myList.Count - 1;

Puis on utilise RemoveAt : myList.RemoveAt(lastIndex);

var ints = new List<int>() { 5, 4, 2 };
ints.RemoveAt(ints.Count - 1);
    

Suppression d’éléments par groupe

Pour supprimer directement plusieurs éléments, on peut utiliser RemoveRange.
Elle est utilisée lorsque l’on veut supprimer plusieurs éléments consécutifs.

Cette fonction prend 2 paramètres : le premier désigne l’index où l’on veut commencer à supprimer, le second indique le nombre d’éléments à supprimer.

private void RemoveRange()
{
    var ints = new List<int>() { 5, 4, 2 };

    // remove 2 values starting at index 1
    ints.RemoveRange(1, 2);

    // only the first value remains
    // List<int>() { 5 };
}
    

Comment supprimer plusieurs valeurs d’une liste dans Unity ?

Pour supprimer plusieurs éléments d’un coup, on utilise RemoveAll.
Cette fonction prend en paramètre une expression lambda.

Cela permet de créer une condition : si un élément de la liste correspond à cette condition, il sera supprimé.

public List<GameObject> gameObjects = new List<GameObject>();

private void RemoveWithTagPlayer()
{
    // remove all gameObject with the player
    gameObjects.RemoveAll(x => x.CompareTag("Player"));
}
    

Conclusion

Sur Unity, il existe différentes méthodes pour supprimer des éléments d’une liste.
Chacune d’elles est à utiliser dans une situation spécifique.

Je tiens à vous mettre en garde contre l’utilisation de Remove dans une boucle, qui peut entraîner des situations non voulues.

Merci d’avoir lu l’article. Amusez-vous sur Unity !

Image de base par OpenIcons.

En apprendre plus :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *