Друзья, приветствую, с Вами Будуев Антон. В данной статье мы обсудим Blueprint-функции Destroy Actor и Destroy Component, отвечающие в Unreal Engine (UE4, UE5) за уничтожение объектов Акторов и компонентов.
Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.
Destroy Actor
В Unreal Engine функция Destroy Actor используется для уничтожения объектов Actor и его компонентов в сцене. Функция удаляет Actor из мира игры и освобождает связанные с ним ресурсы памяти. Важно понимать, что уничтожение Actor необратимо, и он не будет более доступен после вызова DestroyActor.
Итак, в целом, после вызова функции Destroy Actor происходят следующие действия:
- Объект удаляется из игрового мира. Actor перестает существовать в сцене, и его больше нельзя будет увидеть или взаимодействовать с ним. Также, если Actor существовал в сетевой игре, то он будет удален и у всех игроков.
- Уничтожение компонентов. Все компоненты, принадлежащие уничтожаемому Actor, также уничтожаются (удаляются из памяти).
- Вызов события Event End Play. Функция DestroyActor запускает в удаляемом объекте (для всех компонентов и самого Actor) специализированное событие End Play. Данное событие позволяет нам, разработчикам, его обработать, запустив на этом событии необходимую логику при удалении текущего объекта. Например, для остановки звуковых эффектов.
- Освобождение памяти. Память, выделенная для Actor и его компонентов, освобождается, что позволяет избежать её утечек.
На самом деле функция Destroy Actor в Анрил Энджин удаляет только видимый объект Актора с игровой сцены, при этом сам объект остаётся в памяти.
Далее функция помечает оставшийся объект в памяти как Pending Kill (ожидающий уничтожения), а объект будет оставаться в памяти до следующего удаления так называемого «мусора».
Через некоторое время после того, как объект будет помечен для удаления, Garbage Collection (сборщик мусора) удалит его из памяти, освободив все ресурсы, которые использовал Актор.
Destroy Component
В Unreal Engine функция Destroy Component используется для уничтожения объекта конкретного компонента, принадлежащего Actor. Функция удаляет компонент из Actor и освобождает связанные с ним ресурсы. Важно понимать, что после уничтожения компонента он больше не будет доступен в Actor. Если у удаляемого компонента были дочерние компоненты, то они так и остаются у Актора-владельца, поменяв при этом свой родительский компонет на родителя удаляемого объекта.
Destroy Component работает точно так же, как и Destroy Actor, то есть удаляет объект только из уровня, но не из памяти, помечая его при этом как «ожидающий уничтожения». Далее объект компонента, остающийся в памяти, ждёт сборщика «мусора», после прихода которого окончательно будет уничтожен.
Также Destroy Component перед удалением объекта компонента вызывает в нём событие Event End Play.
Важно! Destroy Component невозможно использовать для уничтожения компонента, принадлежащего другому Актору. То есть, для уничтожения компонента функция должна быть вызвана только в Акторе-владельце компонента.
Is Actor Being Destroyed
Функция Is Actor Being Destroyed возвращает True, если Actor в данный момент находится в процессе уничтожения, и False в противном случае. Is Actor Being Destroyed полезна для того, чтобы предотвратить выполнение действий над Actor, который уже начал процесс своего удаления из мира.
Is Component Being Destroyed
Функция Is Component Being Destroyed возвращает True, если объект (в данном случае компонент) находится в процессе уничтожения, и False в противном случае. Аналогично функции Is Actor Being Destroyed, функция Is Component Being Destroyed полезна для предотвращения выполнения действий с компонентом, который уже начал процесс своего удаления из мира или из Актора, которому он принадлежит.
Практические уроки в Unreal Engine
В качестве практики по реализации функций Destroy Actor и Destroy Component Вы можете посмотреть следующие уроки, где я применял рассматриваемые функции:
- Удаление персонажа при столкновении линии трассировки только с его головой. Перейти к практике >>
- Добавляем импульс к объекту, с которым столкнулся снаряд. Перейти к практике >>
- Точечный урон для персонажа с раздельным учётом повреждения головы, тела и защитного щита. Самая интересная практика. В ней используются обе функции: и Destroy Actor, и Destroy Component. Перейти к практике >>
Совет. Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.