Как удалить все объекты с тегом "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]);
    }
→ Ссылка