Как удалить все объекты с тегом "destr"?
Мне нужно в один момент удалить все объекты с тегом "destr", но такой вариант не работает:
for (int i = 0; i <= GameObject.FindGameObjectsWithTag("destr").Length; i++)
{
GameObject destr = GameObject.FindGameObjectWithTag("destr");
Debug.Log(GameObject.FindGameObjectsWithTag("destr").Length + " :have a tag 'destr'");
Destroy(destr);
}
Почему это не работает и как это исправить?
Ответы (1 шт):
Автор решения: Павел
→ Ссылка
Не работает потому, что условие остановки цикла крайне неудачное, поскольку количество объектов с указанным тегом изменяется в процессе работы цикла, а это вызывает неожиданное поведение (side effects).
Для того, чтобы сделать цикл по каждому элементу с данным тегом можно вынести условие остановки в отдельную переменную вне цикла, тогда это будет выглядеть следующим образом:
gameObjects = GameObject.FindGameObjectsWithTag("destr");
for (int i = 0; i < gameObjects.Length; i++)
{
Debug.Log(GameObject.FindGameObjectsWithTag("destr").Length + " :have a tag 'destr'");
Destroy(gameObjects[i]);
}