Как убирать пустоту из листа, оставшуюся после уничтожения объектов, в него входящих?
Давайте попробую пояснить что не так.foreach (GameObject tmp in Group)
{
}
вот тут вы запускаете перебор всех элементов.
но потом вы МЕНЯЕТЕ КОЛИЧЕСТВО элементов в коллекции.Group.Remove(tmp);
и вот нумератор проходит по индексам, а они уже не совпадают.(после старта не обновляются).
В итоге если мы уничтожаем (не удаляем) объект по ссылке , через Destroy(gameObject);
остается список из ссылок на null;
Если же удаляем объекты из коллекции во время похода по коллекции - получаем ошибку с индексами.
как решить.
или сделать через for for(int i =0; i <list.Count;i++)
{
Destroy(list[i]);
list.RemoveAt(i);
i--; // сместили индекс,если было удаление, так как размер коллекции уменьшился
другой вариант - просто после цикла с Destroy(gameObject);
почистить список list.Clear(); (если все зараз всегда удаляются)
Главное надеюсь, чтоб суть проблемы ясна стала.
Такая же проблема была описана тут: Что может быть MissingReferenceException: The object of type 'Object'?
Решение было в комментах от vicsint:Для тех кто окажется тут. Если вы хотите, чтобы ненужные клоны удалялись Destroеm и процесс не прерывался, то необходимо гэйм обжиг удалить из компонентов главной сцены в юнити в левом верхнем меню.(при этом gameObject должен лежать в отдельной папке проекта и быть назначен оттуда на скрипт)