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