You cannot access the “collision” in the first function from the other function. Therefore, “colliders.Remove(collision)” refers to the collision in the second function, which is not even in the list. In order the remove it, you need to access the list by doing:
public List<Collision2D> colliders = new List<Collision2D>();
private void OnCollisionEnter2D(Collision2D collision)
{
Debug.Log("Enter, " + collision.transform);
colliders.Add(collision);
Debug.Log(colliders.Count);
}
private void OnCollisionExit2D(Collision2D collision)
{
Debug.Log("Exit, " + collision.transform);
for (int x = 0; x < colliders.Count; x++) //x increases until it reaches the last element of the list
{
if(colliders[x].gameObject.name == collision.gameObject.name) //checks if every item in the list matches with the name of the collision
{
colliders.Remove(colliders[x]); //removes gameObject if the name matches
}
}
}