Unity как удалить объект?
Unity, C#, удаление созданного GameObject во время игры.
Компьютеры и связь
Развлечения
Нейросети, ИИ
Животные и питомцы
v4-pro
Используйте Destroy с конкретным GameObject, который больше не нужен игре. Это штатный способ убрать экземпляр со всеми его компонентами и дочерними объектами. Для скрипта, уничтожающего собственный объект, вызов выглядит так: Destroy(gameObject).
Например, представьте одноразовый визуальный эффект. Его скрипт получает событие об окончании воспроизведения, вызывает Destroy(gameObject) и завершает обработчик. В сцене исчезает именно экземпляр эффекта. Prefab, из которого он был создан, остаётся в Project и может использоваться снова.
Аргумент определяет масштаб операции. Если написать Destroy(this), целью станет компонент скрипта. Объект может остаться видимым, поскольку Renderer и другие компоненты на нём сохранятся. Если передать ссылку на родительский GameObject, вместе с ним будут удалены дочерние объекты. Поэтому перед вызовом убедитесь, что ссылка указывает на сам эффект, а не на общий контейнер всех эффектов сцены.
Уничтожение не происходит посреди выполняющейся строки кода. Unity откладывает его до завершения текущего цикла Update, перед отрисовкой. В обработчике разумно сразу выйти после запроса, если дальнейшие действия относятся к уже отслужившей цели. В других системах нужно учитывать, что сохранённая ссылка впоследствии больше не обозначает живой объект Unity.
Для такого случая не применяйте DestroyImmediate: обычный отложенный Destroy соответствует жизненному циклу игры. Если объекты намеренно переиспользуются через пул, их возврат в пул является отдельной архитектурой, а не обязательной частью удаления. В вашем вопросе требуется уничтожение одного созданного экземпляра, и дополнительная система для этого не нужна.
4.20
В игровой логике используйте Destroy(gameObject), если удаляется объект, на котором работает скрипт. Для другого объекта передайте его ссылку: Destroy(target). Удалятся его компоненты и дочерние объекты. Destroy(this) удаляет только текущий компонент, поэтому это другой результат. После запроса уничтожения завершите обработку этой цели, чтобы код ниже не продолжал менять её состояние.
Для удаления экземпляра во время игры вызовите Destroy(target), где target — ссылка на нужный GameObject. Если скрипт должен удалить собственный объект, используйте Destroy(gameObject). Не путайте это с Destroy(this): такой вызов удаляет только экземпляр компонента скрипта, оставляя сам объект. Вместе с GameObject удаляются его компоненты и дочерние объекты. Уничтожение выполняется отложенно, после текущего цикла Update, поэтому не рассчитывайте продолжать работу с целью как с существующим объектом. Например, обработчик завершения эффекта может вызвать Destroy(gameObject) и сразу завершить свой метод. Для обычной игровой логики не нужен DestroyImmediate. Операция касается экземпляра в сцене, а не исходного файла prefab в Project.
Пока нет премиум-вопросов в подборке
Не нашли то, что искали?
Задайте свой вопрос
Лучший ответ
Датахакер
Датахакер
Unity как удалить объект?
Destroy(this) как раз оставлял модель на экране, теперь вижу причину.