Unity как удалить все дочерние объекты
Перейти к содержимому

Unity как удалить все дочерние объекты

  • автор:

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

MrMureno

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

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

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

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

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

в общем дебаг и отладка вам в помощь)

Окно Hierarchy

Представление окна иерархии по умолчанию при открытии нового проекта Unity

В окне Hierarchy отображаются все GameObject фундаментальный объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
Смотреть в Словарь в Сцене, например модели, Камеры или Prefabs Тип ресурса, который позволяет хранить GameObject с компонентами и свойствами. Префаб действует как шаблон, из которого вы можете создавать новые экземпляры объектов на сцене. Подробнее
См. в Словарь . Вы можете использовать окно Hierarchy для сортировки и группировки игровых объектов, которые вы используете в сцене. Когда вы добавляете или удаляете игровые объекты в представлении «Сцена», вы также добавляете или удаляете их из окна «Hierarchy».

Окно «Hierarchy» также может содержать другие сцены, причем каждая сцена Сцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь , содержащий их собственные игровые объекты.

Воспитание детей

Unity использует концепцию родительско-дочерних иерархий или родительских элементов для группировки игровых объектов. Объект может содержать другие игровые объекты, которые наследуют его свойства. Вы можете связать игровые объекты вместе, чтобы помочь перемещать, масштабировать или преобразовывать коллекцию игровых объектов. Когда вы перемещаете объект верхнего уровня или родительский игровой объект, вы также перемещаете все дочерние игровые объекты.

Вы также можете создавать вложенные игровые объекты родитель-потомок. Все вложенные объекты по-прежнему являются потомками исходного родительского игрового объекта или корневого игрового объекта.

Дочерние игровые объекты наследуют движение и вращение родительского игрового объекта. Чтобы узнать больше об этом, см. документацию по компоненту Transform компоненту Transform определяет положение, вращение и масштаб каждого объекта в сцене. Каждый GameObject имеет Transform. Подробнее
См. в Словарь .

Child 1 и Child 2 являются дочерними GameObjects Parent. Child 3 является дочерним GameObject Child 2 и потомком GameObject Parent..

Организация игровых объектов

Создание новых игровых объектов

Чтобы создать новый GameObject в окне Hierarchy:

  1. Щелкните правой кнопкой мыши пустое место в выбранной сцене.
  2. Выберите игровой объект, который хотите создать.

Вы также можете нажать Ctrl+Shift+N (Windows) или Command+Shift+N (macOS), чтобы создать новый пустой игровой объект.

Примечание. Новые игровые объекты создаются в режиме «переименования» автоматически. Чтобы отключить это поведение, выберите меню «Дополнительно» (⋮) в окне «Hierarchy» и снимите флажок Rename New Objects.

Переключение видимости дочернего игрового объекта

Чтобы переключить видимость дочерних игровых объектов:

  1. Выберите стрелку раскрывающегося списка (►) слева от родительского игрового объекта.
  2. Нажмите Alt, одновременно нажимая стрелку раскрывающегося списка (►), чтобы переключить видимость всех дочерних игровых объектов корневого игрового объекта.
  3. Снова нажмите стрелку раскрывающегося списка (▼), чтобы свернуть все дочерние игровые объекты.

Создание дочерних игровых объектов

Чтобы создать дочерний игровой объект:

Перетащите объект 4 (выбранный) на родительский игровой объект, объект 1 (выделен синим), чтобы создать дочерний игровой объект..

  • Перетащите GameObject на родительский GameObject в иерархии.

Создание родительских игровых объектов

Вы можете добавить новый игровой объект в представление «Hierarchy» в качестве родителя существующих игровых объектов.

Чтобы создать родительский игровой объект:

  1. Щелкните правой кнопкой мыши игровой объект или выберите несколько игровых объектов на одном уровне и щелкните правой кнопкой мыши.
  2. Выберите Create Empty Parent.

Вы также можете нажать Ctrl+Shift+G (Windows) или Command+Shift+G (macOS), чтобы создать родительский игровой объект.

Примечание. Если вы установили родительский игровой объект по умолчанию, функция Создать пустой родительский объект создает новый игровой объект как дочерний элемент родительского объекта по умолчанию, а не родительский объект выбранных игровых объектов.

Создание родственных игровых объектов

Родственный GameObject — это GameObject с той же иерархией, что и другой дочерний GameObject. Чтобы создать одноуровневый GameObject:

Перетащите Объект 4 (выбранный) между Объектом 2 и Объектом 3 (обозначенным синей горизонтальной линией), чтобы создать одноуровневый GameObject под родительским Объектом GameObject 1 (выделен синим цветом).

  1. Перетащите GameObject выше или ниже существующего GameObject.
  2. Используйте горизонтальную синюю линию, чтобы определить порядок GameObject.

Дублирование игровых объектов

Чтобы дублировать игровые объекты, щелкните правой кнопкой мыши целевой игровой объект и выберите Duplicate.

Вы также можете нажать Ctrl+D (Windows) или Command+D (macOS), чтобы дублировать выбранный игровой объект.

Вставка игровых объектов в качестве дочерних

Вы можете вырезать или скопировать выбранный игровой объект, а затем вставить его как дочерний элемент другого игрового объекта. Вставленные дочерние игровые объекты сохраняют свою позицию в мире.

Чтобы вставить GameObject как дочерний:

  1. Щелкните правой кнопкой мыши выбранный игровой объект и выберите Cut или Copy.
  2. Щелкните правой кнопкой мыши предполагаемый родительский игровой объект и выберите Paste as Child.

Вы также можете нажать Ctrl+Shift+V (Windows) или Command+Shift+V (macOS), чтобы вставить GameObject в качестве дочернего.

Организация игровых объектов с родительским элементом по умолчанию

Вы можете сделать любой GameObject в окне Hierarchy «родителем по умолчанию». Когда вы перетаскиваете GameObject в представление «Сцена», Unity автоматически делает этот GameObject дочерним для GameObject, который вы установили в качестве родителя по умолчанию.

Чтобы сделать GameObject родителем по умолчанию:

  1. В окне «Hierarchy» щелкните правой кнопкой мыши игровой объект.
  2. Выберите Set as Default Parent.

При перетаскивании игрового объекта в представление «Сцена» в окне «Hierarchy» дочерний игровой объект располагается ниже родительского игрового объекта по умолчанию. Имя родительского игрового объекта по умолчанию выделено полужирным шрифтом.

На этом изображении Cube GameObject является родителем по умолчанию. Когда пользователь перетаскивает игровой объект «Автомобиль» в представление «Сцена», Unity автоматически делает его дочерним элементом игрового объекта «Куб».

Чтобы удалить родительский статус по умолчанию для GameObject:

  1. В окне «Hierarchy» щелкните правой кнопкой мыши игровой объект.
  2. Выберите Clear Default Parent.

Имя GameObject, которое ранее было родительским по умолчанию, больше не выделено полужирным шрифтом. Когда вы перетаскиваете GameObject в представление «Сцена», он появляется на верхнем уровне в окне «Hierarchy». Другими словами, Unity не делает этот GameObject дочерним по отношению к GameObject, который ранее был родителем по умолчанию.

На этом изображении ни один из игровых объектов в окне Hierarchy не установлен в качестве родителя по умолчанию. Когда пользователь перетаскивает игровой объект Car в окно Scene, Unity добавляет его на верхний уровень иерархии.

Вы можете установить только один родитель по умолчанию для каждой сцены. В окне Hierarchy, если вы установите GameObject в качестве родителя по умолчанию, а затем сделаете другой GameObject в той же сцене родительским по умолчанию, только второй GameObject будет родителем по умолчанию.

Если у вас есть несколько сцен в окне «Hierarchy» и вы устанавливаете родительские объекты по умолчанию в каждой сцене, при перетаскивании игрового объекта в представление «Сцена» Unity делает родительский игровой объект по умолчанию в активной сцене родителем нового игрового объекта.

На этом изображении кубические игровые объекты как в Scene1, так и в Scene2 установлены как родительские по умолчанию. Unity устанавливает куб в Scene1 в качестве родителя игрового объекта Car, потому что Scene1 является активной сценой..

Вы можете установить сочетание клавиш для родительского параметра по умолчанию в менеджере сочетаний клавиш. В окне «Shortcuts» назначьте сочетание клавиш Hierarchy View > Set as Default Parent. Если родительского набора по умолчанию нет, а в окне Hierarchy вы выбираете GameObject, используйте ярлык, чтобы сделать этот GameObject родительским по умолчанию. Когда установлен родительский элемент по умолчанию, используйте ярлык, чтобы удалить родительский статус по умолчанию для любого игрового объекта, у которого он есть.

Настройка видимости и возможности выбора сцены

Нажмите значок видимости сцены, чтобы скрыть и отобразить игровые объекты в представлении сцены Интерактивный взгляд на мир, который вы создаете. Вы используете Scene View для выбора и размещения пейзажей, персонажей, камер, источников света и всех других типов игровых объектов. Подробнее
Просматривать в Словарь без изменения видимости в приложении.

Выберите значок выбора сцены, чтобы переключить возможность выбора игровых объектов в представлении «Сцена» во время редактирования.

Эти элементы управления полезны для работы с большими или сложными сценами, где сложно просмотреть и выбрать определенные игровые объекты.

Значки/переключатели видимости сцены

Дополнительную информацию см. в документации по видимости сцены и выбору сцены.

Сортировка игровых объектов

По умолчанию в окне «Hierarchy» игровые объекты перечислены в порядке их создания. Вы можете перетащить выбранный игровой объект вверх или вниз в сцене, чтобы изменить порядок игровых объектов.

Буквенно-цифровая сортировка

Чтобы отсортировать игровые объекты в алфавитно-цифровом порядке:

  1. Select Edit > Preferences (Windows) or Unity > Preferences (macOS).
  2. Select Enable Alphanumeric Sorting.

При выборе в окне «Hierarchy» появляется значок, позволяющий переключаться между сортировкой Transform (значение по умолчанию) или сортировкой Alphabetical.

Редактирование нескольких сцен

В окне иерархии одновременно может быть открыто несколько сцен. Дополнительную информацию см. на странице Редактирование нескольких сцен.

  • Переключение видимости сцены добавлено в 2019.1
  • Переключение выбора сцены добавлено в 2019.3

Unity: Освободится ли память после удаления GameObject?

Привет всем)
Я новичок и параноик))) Пишу на С#, возник собственно вопрос*(заголовок).
Знаю что в С# есть коллектор мусора). Работает ли этот коллектор в юнити.
Юнити полностью освобождает память при удалении родительского обьекта(не мухлюет, удаляет все дочерние обьекты).
Стоит на этом заморачиваться? Есть у юнити какие-то особенности, может в некоторых случаях появляются утечки.

Заранее благодарен всем за ответы)

#1
19:54, 25 ноя 2014

Освободится, но вот когда именно тут уже я так понимаю как там сборщик мусора решит.

#2
8:05, 26 ноя 2014

Если на GameObject есть где-либо ссылка (в классе, в префабе, да где угодно), то объект удалится только со сцены, в памяти он останется
и удалится только тогда, когда не останется ссылок на него.

#3
9:07, 26 ноя 2014
#4
12:40, 26 ноя 2014

Допустим у мня есть родительский обьект и дочерний. В родителе есть ссылки на дочерний обьект.
Если удалить родителя(ссылки обнулятся?), то дочерний удалится? Память освободится?

#5
12:48, 26 ноя 2014

Alerr
Если на дочерний никто больше не ссылается, то удалится.

#6
12:54, 26 ноя 2014

Понятно, а считается «ссылкой» на дочерний обьект если на него ссылается дочерний дочернего? Родитель->Дочерний1Дочерний2

#7
17:45, 26 ноя 2014

Alerr
> Допустим у мня есть родительский обьект и дочерний. В родителе есть ссылки на
> дочерний обьект.
> Если удалить родителя(ссылки обнулятся?), то дочерний удалится? Память
> освободится?

Существуют нативные объекты, с которыми непосредственно работает движок, и управляемые обёртки над ними, с которыми работаем мы через API.

Если под отношением родительский-дочерний понимается положение объектов в иерархии:

var parentGO = new GameObject( ); var childGO = new GameObject( ); childGO.transform.parent = parentGO.transform;

то при уничтожении родительского объекта через Destroy(parentGO) оба нативных объекта со всеми их компонентами будут уничтожены движком в промежутке между текущим и следующим кадрами. Их управляемые обёртки parentGO и childGO, а также обёртки над их компонентами (всякие MeshRenderer, MeshFilter и т.п.) и экземпляры пользовательских компонентов будут стёрты из памяти только тогда, когда этого захочет сборщик мусора, и только если на них не существует ссылок из других мест.

Удаление дочерних объектов и сразу же создание новых

Автоматическое создание и удаление объектов
У меня есть объект, который при определённых обстоятельствах удаляется через Destroy.Мне нужно.

Unity 5. Как сделать создание и удаление объектов
Пишу скрипты на C# хочу сделать ферму но не знаю как сделать создание объекта пшеница на.

Создание объектов дочерних классов
Допустим у меня есть класс Parent. И есть дочерние классы ChildA, ChildB, ChildC. Есть функция в.

Можно ли запретить или временно приостановить удаление дочерних объектов?
Доброго времени суток! Ситуация: Делегат, в делегате создаю свой ComboBox, в котором есть.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *