Как в unity удалить некоторое количество дочерних объектов?

Нужно удалить некоторое определенное количество случайных дочерних объектов(Например из 500 осталось чтоб 50). Пишу так:
int target = obj.transform.childCount - 50;
            int sum = 0;
            while (b)
            {
                Destroy(obj.transform.GetChild(
                    Random.Range(0, obj.transform.childCount - 1)
                    ).gameObject);

                sum++;

                if (sum == target)
                    break;
            }

Ничего не удаляется. Пишу так:
int target = obj.transform.childCount-50;
            int sum = 0;
            while (b)
            {
                foreach (Transform t in obj.transform)
                {

                    if (Random.Range(0, 100) < 5)
                    {
                        Destroy(t.gameObject);
                        sum++;
                    }

                }

                if (sum == target)  
                    break;
                

            }

Просто зацикливается.
  • Вопрос задан
  • 1443 просмотра
Решения вопроса 1
MrMureno
@MrMureno Куратор тега Unity
VR for all
наверно придется вам выкладывать мини проектик - который можно позапускать.
так на вид - код более менее адекватный, кроме момента "а что если target отрицательный??"

вот меньше 50 child)) - будете получать бесконечный цикл.

условие сделали бы
while (target>0)
а в цикле после Destroy
target--;

не стартовало бы цикл, если чаилдов недостаточно, и вообще прозрачнее все это было.

еще предложил бы без рандома, просто удалить таким циклом, чтоб убедится в работоспособности)
а так отладчик вам в руки - и смотреть чему равны переменные и почему ничего не удаляется))

я бы вообще всех чаилдов в отдельный список бы скопировал - и уже потом с ними проводил манипуляции.
так как операция Destroy - срабатывает не сразу (если упрощенно, то ближайшие пару кадров - когда движку комфортнее)
возможно обращения
obj.transform.GetChild()
obj.transform.childCount
продолжают выдавать ссылки на уже как бы "удаленные" объекты - и получается что он 300 раз удалил 50 объектов.
хотя тогда думаю вы б заметили.

в общем дебаг и отладка вам в помощь)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы