Показать сообщение отдельно
Старый 17.10.2020, 08:59   #18
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Очередные вопросы от меня по игровой логике и скриптингу

Сделай так:
FightScene.Units.ForEach(Listalo => { if (Listalo)  Destroy(Listalo); });
// удалить все уничтоженные объекты списка
FightScene.Units.RemoveAll(Listalo => Listalo == null); 
Так же если тебе нужно удалить все элементы, то вызови FightScene.Units.Clear(); после уничтожения объектов. Т.е.
FightScene.Units.ForEach(Listalo => { if (ListaloDestroy(Listalo);});
// очистить список
FightScene.Units.Clear(); 
Я иногда перебираю список в обратном порядке, чтобы уничтожить только нужные объекты:
for(int i FightScene.Units.Count-1i>=0i--)
{
    if(
FightScene.Units[i].IsDead// проверка юнита на смерть
    
{
          
Destroy(FightScene.Units[i]);
          
FightScene.Units.RemoveAt(i);
    }

Т.к. в этом случае не используется foreach, который создает энумератор при переборе элементов списка, то не происходит исключения при изменении коллекции.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Crystal (17.10.2020)