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

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

  • автор:

Создание и уничтожение игровых объектов (GameObjects)

Некоторые игры имеют постоянное количество объектов на сцене, однако обычно персонажи, сокровища и другие объекты создаются и удаляются во время игры. В Unity, игровой объект (GameObject) может быть создан используя функцию Instantiate, которая делает копию существующего объекта:-

public GameObject enemy; void Start() < for (int i = 0; i < 5; i++) < Instantiate(enemy); >> 

Заметьте, что объект с которого берется копия не обязан присутствовать на сцене. Гораздо чаще используется префаб, который был перетащен на открытую переменную (public variable) из файлов проекта в панели Project. Также, копируя игровой объект (GameObject), вы копируете все компоненты оригинального объекта.

Также есть функция Destroy, которая уничтожит объект после того, как загрузка кадра будет завершена или опционально после короткой паузы:-

void OnCollisionEnter(Collision otherObj) < if (otherObj.gameObject.tag == "Missile") < Destroy(gameObject,.5f); >> 

Заметьте что функция Destroy может уничтожать отдельные компоненты без влияния на сам объект. Частая ошибка — писать что-то вроде этого:-

 Destroy(this); 

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

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 и т.п.) и экземпляры пользовательских компонентов будут стёрты из памяти только тогда, когда этого захочет сборщик мусора, и только если на них не существует ссылок из других мест.

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

Текущее время: 29 апр 2024, 11:00

Как удалить дочерний объект? [РЕШЕНО]

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.
Сообщений: 7 • Страница 1 из 1

Как удалить дочерний объект? [РЕШЕНО]

Fox_game 08 июл 2017, 19:43

Помогите !
Столкнулся с такой проблемой:
Мне нужно удалить 2 дочерний объект. То есть если создалось 2 дочерних объекта 2 должен удалиться!
Подскажите как правильно написать код на удаление 2 дочернего объекта !? [Unity3dPlayer][/Unity3dPlayer]

Последний раз редактировалось Fox_game 12 июл 2017, 13:06, всего редактировалось 1 раз.
Fox_game UNIт Сообщения: 117 Зарегистрирован: 08 июл 2017, 19:33

Re: Как удалить дочерний объект?

Fox_game 08 июл 2017, 19:50

Или скажите как сделать чтоб объект не мог иметь больше 1 дочернего объекта!?
Fox_game UNIт Сообщения: 117 Зарегистрирован: 08 июл 2017, 19:33

Re: Как удалить дочерний объект?

waruiyume 08 июл 2017, 19:59

Логично было бы не добавлять второй объект, либо удалить тот, который был раньше, перед назначением следующего.
А так, берёте Transform.childCount и Transform.GetChild и обходите все объекты, начиная с конца, кроме нулевого, и скармливаете их в Destroy.

waruiyume Адепт Сообщения: 6143 Зарегистрирован: 30 окт 2010, 05:03 Откуда: Ростов на Дону

Re: Как удалить дочерний объект?

Fox_game 08 июл 2017, 20:06

waruiyume писал(а): Логично было бы не добавлять второй объект, либо удалить тот, который был раньше, перед назначением следующего.
А так, берёте Transform.childCount и Transform.GetChild и обходите все объекты, начиная с конца, кроме нулевого, и скармливаете их в Destroy.

не можешь по подробнее. Мне надо чтоб уделялся 2 дочерний объект дай скрипт если не сложно
if (invt.transform.GetChild (i).transform.GetChild (1).gameObject) Destroy (invt.transform.GetChild (i).transform.GetChild (1).gameObject);
>
вот я написал, что нужно поправить? Только пж подробнее. А то я тупой могу не понять

Fox_game UNIт Сообщения: 117 Зарегистрирован: 08 июл 2017, 19:33

как удалить дочерний объект?

Fox_game 08 июл 2017, 20:42

1. У меня есть родительский объект. У меня есть два дочерных объекта как удалить 2 дочерный объект
2. У меня есть родительский объект. У меня есть два дочерных объекта как удалить их обоих ?
Помогите пж! и можно подробнее? А то у меня могут быть проблемы. И не заставляйте прочесывать мануалы поверьте я пробывал. Не вышло.

Fox_game UNIт Сообщения: 117 Зарегистрирован: 08 июл 2017, 19:33

Re: как удалить дочерний объект?

samana 08 июл 2017, 20:54

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

Author24 — интернет-сервис помощи студентам

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

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

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

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

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

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