Как найти дочерний объект и отключить его, а через некоторое время опять включить?
Но условия изменились и «SpwnEff» больше не публичный объект, а назначаемый другим скриптом. И теперь их много и с разными именами. Теперь этот объект дочерний. Нужно в скрипте, который «повиснет» на «родителе» обратится к дочерним объектам — на старте — отключить их. Затем при условии transform.position.y < -20 - включить - и через секунду - опять отключить. Этот процесс должен быть повторяемым. Речь идёт о персонаже, на котором висит префаб - эффект вспышки. Когда персонаж появляется на сцене - префаб отключён - когда проваливается вниз, до отметки -20 - префаб должен включаться (другой скрипт возвращает персонажа на чек-поинт и по задумке, должна произойти вспышка), а затем, через пару секунд, префаб надо отключить - что б, при следующем падении он опять сработал.
Не получается удалить объект Unity
Всем привет. Начал изучение Unity и столкнулся со странной для меня проблемой. Не могу удалить созданный объект методом Destroy() . Мне просто нужно очистить все поле путем удаления ячеек и повторного их создания.
Буду признателен если укажете на ошибку.
Есть объект Cell и массив этих объектов, где я вызываю Instantiate() и храню их.
Из класса Cell ничего не удалял для наглядности, а в самом моем GridController оставил только те строки, где идет взаимодействие с массивом.
public class Cell : MonoBehaviour < public System.ActiononCellPressed; public Color _teamAColor; public Color _teamBColor; public Color _blockedColor; public Image _cellBackground; public int playerId = 0; public int positionX; public int positionY; public void SetId(int id) < playerId = id; UpdateBackgroundColor(); >public void OnCellPressed() < onCellPressed.Invoke(this); >private void UpdateBackgroundColor() < if (playerId == 1) < _cellBackground.color = _teamAColor; >else if (playerId == 2) < _cellBackground.color = _teamBColor; >else < _cellBackground.color = _blockedColor; >> >
public class GridController : MonoBehaviour < public Cell[,] _grid; public Cell _cellPrefab; public GameObject playAgainButton; void Awake() < InitGrid(); >private void InitGrid() < _grid = new Cell[_size, _size]; for (int i = 0; i < _size; i++) < for (int j = 0; j < _size; j++) < _grid[i, j] = Instantiate(_cellPrefab, transform); >> > public void ClearGrid() < for (int i = 0; i < _size; i++) < for (int j = 0; j < _size; j++) < Destroy(_grid[i, j]); >> > public void RestartGame() < ClearGrid(); // Awake(); >>
Отслеживать
задан 28 окт 2020 в 9:19
47 1 1 серебряный знак 12 12 бронзовых знаков
Destroy(_grid[i, j].gameObject)
28 окт 2020 в 9:27
@Methorn спасибо большое, заработало! А в чем суть? У всех объектов якобы есть ссылка gameObject по которой можно удалять?
28 окт 2020 в 9:30
ты пытался удалить класс Cell. Destroy() с объектами работает(объектами сцены)
28 окт 2020 в 9:32
@Methorn ааа. То есть в данном случае у меня за классом Cell закреплен игровой объект, и поэтому обращение через .gameObject обращается к самому объекту, да?
Как в unity удалить некоторое количество дочерних объектов?

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

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

Организация игровых объектов
Создание новых игровых объектов
Чтобы создать новый GameObject в окне Hierarchy:
- Щелкните правой кнопкой мыши пустое место в выбранной сцене.
- Выберите игровой объект, который хотите создать.
Вы также можете нажать Ctrl+Shift+N (Windows) или Command+Shift+N (macOS), чтобы создать новый пустой игровой объект.
Примечание. Новые игровые объекты создаются в режиме «переименования» автоматически. Чтобы отключить это поведение, выберите меню «Дополнительно» (⋮) в окне «Hierarchy» и снимите флажок Rename New Objects.
Переключение видимости дочернего игрового объекта
Чтобы переключить видимость дочерних игровых объектов:
- Выберите стрелку раскрывающегося списка (►) слева от родительского игрового объекта.
- Нажмите Alt, одновременно нажимая стрелку раскрывающегося списка (►), чтобы переключить видимость всех дочерних игровых объектов корневого игрового объекта.
- Снова нажмите стрелку раскрывающегося списка (▼), чтобы свернуть все дочерние игровые объекты.
Создание дочерних игровых объектов
Чтобы создать дочерний игровой объект:

- Перетащите GameObject на родительский GameObject в иерархии.
Создание родительских игровых объектов
Вы можете добавить новый игровой объект в представление «Hierarchy» в качестве родителя существующих игровых объектов.
Чтобы создать родительский игровой объект:
- Щелкните правой кнопкой мыши игровой объект или выберите несколько игровых объектов на одном уровне и щелкните правой кнопкой мыши.
- Выберите Create Empty Parent.
Вы также можете нажать Ctrl+Shift+G (Windows) или Command+Shift+G (macOS), чтобы создать родительский игровой объект.
Примечание. Если вы установили родительский игровой объект по умолчанию, функция Создать пустой родительский объект создает новый игровой объект как дочерний элемент родительского объекта по умолчанию, а не родительский объект выбранных игровых объектов.
Создание родственных игровых объектов
Родственный GameObject — это GameObject с той же иерархией, что и другой дочерний GameObject. Чтобы создать одноуровневый GameObject:

- Перетащите GameObject выше или ниже существующего GameObject.
- Используйте горизонтальную синюю линию, чтобы определить порядок GameObject.
Дублирование игровых объектов
Чтобы дублировать игровые объекты, щелкните правой кнопкой мыши целевой игровой объект и выберите Duplicate.
Вы также можете нажать Ctrl+D (Windows) или Command+D (macOS), чтобы дублировать выбранный игровой объект.
Вставка игровых объектов в качестве дочерних
Вы можете вырезать или скопировать выбранный игровой объект, а затем вставить его как дочерний элемент другого игрового объекта. Вставленные дочерние игровые объекты сохраняют свою позицию в мире.
Чтобы вставить GameObject как дочерний:
- Щелкните правой кнопкой мыши выбранный игровой объект и выберите Cut или Copy.
- Щелкните правой кнопкой мыши предполагаемый родительский игровой объект и выберите Paste as Child.
Вы также можете нажать Ctrl+Shift+V (Windows) или Command+Shift+V (macOS), чтобы вставить GameObject в качестве дочернего.
Организация игровых объектов с родительским элементом по умолчанию
Вы можете сделать любой GameObject в окне Hierarchy «родителем по умолчанию». Когда вы перетаскиваете GameObject в представление «Сцена», Unity автоматически делает этот GameObject дочерним для GameObject, который вы установили в качестве родителя по умолчанию.
Чтобы сделать GameObject родителем по умолчанию:
- В окне «Hierarchy» щелкните правой кнопкой мыши игровой объект.
- Выберите Set as Default Parent.
При перетаскивании игрового объекта в представление «Сцена» в окне «Hierarchy» дочерний игровой объект располагается ниже родительского игрового объекта по умолчанию. Имя родительского игрового объекта по умолчанию выделено полужирным шрифтом.

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

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

Вы можете установить сочетание клавиш для родительского параметра по умолчанию в менеджере сочетаний клавиш. В окне «Shortcuts» назначьте сочетание клавиш Hierarchy View > Set as Default Parent. Если родительского набора по умолчанию нет, а в окне Hierarchy вы выбираете GameObject, используйте ярлык, чтобы сделать этот GameObject родительским по умолчанию. Когда установлен родительский элемент по умолчанию, используйте ярлык, чтобы удалить родительский статус по умолчанию для любого игрового объекта, у которого он есть.
Настройка видимости и возможности выбора сцены
Нажмите значок видимости сцены, чтобы скрыть и отобразить игровые объекты в представлении сцены Интерактивный взгляд на мир, который вы создаете. Вы используете Scene View для выбора и размещения пейзажей, персонажей, камер, источников света и всех других типов игровых объектов. Подробнее
Просматривать в Словарь без изменения видимости в приложении.
Выберите значок выбора сцены, чтобы переключить возможность выбора игровых объектов в представлении «Сцена» во время редактирования.
Эти элементы управления полезны для работы с большими или сложными сценами, где сложно просмотреть и выбрать определенные игровые объекты.
![]()
Дополнительную информацию см. в документации по видимости сцены и выбору сцены.
Сортировка игровых объектов
По умолчанию в окне «Hierarchy» игровые объекты перечислены в порядке их создания. Вы можете перетащить выбранный игровой объект вверх или вниз в сцене, чтобы изменить порядок игровых объектов.
Буквенно-цифровая сортировка
Чтобы отсортировать игровые объекты в алфавитно-цифровом порядке:
- Select Edit > Preferences (Windows) or Unity > Preferences (macOS).
- Select Enable Alphanumeric Sorting.
При выборе в окне «Hierarchy» появляется значок, позволяющий переключаться между сортировкой Transform (значение по умолчанию) или сортировкой Alphabetical.

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