Друзья, приветствую, с Вами Будуев Антон. В данной статье мы обсудим и разберём Unreal Engine Component, так называемые компоненты Blueprint в UE5 (UE4). Разберём, что это такое, их базовые классы, иерархию и основные часто используемые типы.
Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.
Unreal Engine Component
Unreal Engine Component или компоненты в Blueprint — это особый тип объектов (классы C++, являющиеся частью архитектуры Unreal Engine), которые можно присоединить к классу Actor или другим дочерним от него классам (далее в статье просто Актор) в качестве дополнительной готовой функциональности.
Когда Component добавляется к Актору, то данный Актор может свободно использовать функции, предоставляемые этим компонентом, например:
- Актор, имеющий компонент точечного освещения, будет способен излучать свет в виде точечного освещения.
- Компонент движения заставит объект Актора двигаться.
- Аудиокомпонент даст возможность Актору воспроизводить звуки.
Component — это, по сути, готовый составной блок или часть Актора, которая отвечает за реализацию в нём конкретной задачи, функциональности или поведения, позволяя ему взаимодействовать с миром.
Например, как компьютер состоит из готовых компонентов, каждый со своей функциональностью, таких как оперативная память, жесткий диск, процессор и так далее. Так и Актор, представляющий игрового персонажа, может состоять из отдельных Components: скелетной сетки (визуальное представление персонажа), коллизии, позволяющей персонажу взаимодействовать с игровым миром, камеры, дающей возможность наблюдать игроку за игрой или компонента движения, с помощью которого персонаж будет передвигаться.
В отличие от Акторов, компоненты не могут существовать сами по себе. Они должны быть обязательно прикреплены к Actor.
Также важно понимать, когда создаётся объект класса Actor (его экземпляр в игровом мире), то для каждого Components, содержащихся в этом Акторе, также создаются свои экземпляры компонентов, уникальные для этого Актора, со своими настройками и значениями свойств.
Именно поэтому одни и те же компоненты могут быть использованы повторно с разными настройками в любом количестве других Акторов, что способствует модульности и упрощает разработку.
Static и Dynamic Components
Любые компоненты с точки зрения регистрации их в движке Unreal Engine разделяются на 2 вида:
- Статические компоненты — это такие компоненты, которые прикрепляются к Actor внутри самого файла блюпринта в окне Components. При этом регистрация компонента в движке происходит в момент создания объекта Actor, являющимся владельцем компонента.
- Динамические компоненты — это такие компоненты, которые прикрепляются к Actor и регистрируются в движке динамически уже при запущенной игре с помощью кода C++ или Blueprint-скриптов.
Базовые классы Component в Unreal Engine
В составе Unreal Engine имеется большое количество уже готовых Components. Но мы, как разработчики игр, для удобства и модульности разработки, можем также создавать свои компоненты. Например, можно создать свой компонент здоровья персонажа и затем использовать его повторно при разработке множества персонажей игры, просто настроив индивидуально под каждый из них параметры готового модуля здоровья.
При создании своих собственных компонентов необходимо понимать несколько основных базовых классов, на основе которых и создаются пользовательские Components: это компоненты Акторы, компоненты сцены и примитивные компоненты.
- Actor Component class (компонент Актор) — является базовым классом для всех других классов компонентов. Actor Component не имеет свойств трансформации, так как у него нет физического местоположения, поворота или масштаба в игровом мире. Но имеет внутри себя Component Tick — функционал обновления при каждом такте игры с помощью события Event Tick. Данный класс используется для абстрактных действий, таких как перемещение, управление инвентарём или атрибутами, а также для других нефизических концепций. Например, его можно задействовать для компонента здоровья. В общем, применяется он в тех случаях, когда нужно просто рассчитать какую-либо логику. Примером может служить компонент Character Movement, реализующий логику передвижения персонажа.
- Scene Component class (компоненты сцены) — является дочерним классом от Actor Component и отличается от него наличием свойств трансформации. То есть Scene Component имеет конкретные координаты, поворот и масштаб в игровом мире, но не имеет свойств для физической визуализации на игровом уровне. Основная задача компонентов данного класса — поддерживать поведение, основанное на местоположении, которое не требует геометрического представления. Например, с помощью этого класса компонентов можно реализовывать звук, свет, физические силы и ограничения, пружинные рычаги для присоединения камеры и так далее. Наиболее известные готовые компоненты этого класса — это Camera, Camera Shake, Point Light, Spot Light, Sky Light и другие.
- Primitive Component class (примитивные компоненты) — является дочерним классом от Scene Component и отличается от него геометрическим представлением для визуализации на уровне. Обычно используются для рендеринга визуальных элементов, столкновения или перекрытия с физическими объектами. Наиболее известные готовые компоненты этого класса — это Niagara, Static Mesh, Skeletal Mesh, Widget и другие.
Создание пользовательских Components
Пользовательские компоненты в Unreal Engine создаются точно так же, как и другие Blueprint-классы. А именно, необходимо кликнуть по кнопке Blueprint class в контекстном меню Content Browser. Далее в открывшемся окне Pick Parent Class выбрать нужный Вам класс компонента. Для этого можно воспользоваться быстрыми кнопками Actor Component и Scene Component, или же в поле поиска просто ввести слово Component.
Иерархия добавления Component в Blueprint
При добавлении в Акторе кнопкой «+Add» готовых компонентов в окно Component все компоненты устраиваются в чёткую структуру. Причём если добавляемый компонент принадлежит к классу Actor Component, то есть внутри него отсутствует визуализация и трансформация, то такие компоненты в этом окне добавляются в самый низ, а в Blueprint-классах Character они добавляются под чертой. Например, компонент Character Movement не имеет трансформации и принадлежит к классу Actor Component, поэтому он всегда находится ниже черты.
Если же добавляемый компонент относится к классу Scene Component, то есть содержит внутри себя трансформацию (координаты, поворот и масштаб), то такие компоненты добавляются выше черты и выстраиваются в чёткую иерархию с дочерне-родительскими отношениями. Где один или несколько компонентов могут быть вложены в другой компонент, который для них будет являться родительским. Родительский элемент всегда помечается повёрнутым вниз треугольником, а дочерние элементы сдвинуты правее родительского.
Данная иерархия Component очень важна, так как, к примеру, изменяя свойства масштаба или координаты в родительском компоненте, также эти свойства будут меняться и во всех дочерних. Но, замечу, не наоборот! Изменения свойств в дочерних элементах НЕ будут распространяться на родительские и соседние дочерние компоненты.
Default Scene Root Component
У каждого Actor также имеется Root Component свойство, указывающее, какой компонент является корневым для текущего Актора.
Сами Акторы не имеют свойства трансформации, следовательно, не имеют координат местоположения, значений поворота или масштаба. Вместо этого они используют данные о трансформации от своих компонентов, а точнее, от своего Root Component (корневого компонента).
При создании Actor в качестве корневого компонента, от которого Актор наследует значения трансформации, по умолчанию используется Default Scene Root Component, являющийся базовым классом Scene Component. Именно от него Актор и берёт координаты местоположения, значения поворота и масштаба в игровом мире.
В качестве Root Component также можно использовать не только Default Scene Root Component, который идёт по умолчанию, но и любой другой компонент класса Scene Component. Для этого необходимо для начала добавить к Актору нужный компонент, а затем перетащить его поверх Default Scene Root, тогда в качестве Root Component будет использоваться не базовый Default Scene Component, а тот, который Вы назначили.
Ключевые особенности компонентов
Подытожим ключевые особенности и характеристики компонентов в Blueprints движка Анрил Энджин:
- Функциональность — каждый компонент отвечает за определенный аспект поведения Актора, например, рендеринг, коллизию, звук, ввод, физику и так далее.
- Модульность — компоненты позволяют разделить сложную функциональность на более мелкие и управляемые блоки.
- Многоразовое использование — компоненты можно использовать в разных Actor.
- Настраиваемость — компоненты можно настраивать через параметры, позволяя создавать различные варианты поведения.
- Вложенность — компоненты могут быть вложены друг в друга, что позволяет создавать сложные иерархии.
- Зависимость от Actor — компоненты не могут существовать вне Actor.
- Root Component — в любом Акторе обязательно должен присутствует корневой компонент, от которого Актор берёт значения трансформации в игровом мире.
Типы Components в Unreal Engine
Unreal Engine (UE4, UE5) предоставляет множество встроенных готовых компонентов, которые можно использовать в своих проектах. Рассмотрим кратко некоторые из наиболее распространенных типов Components:
- Scene — базовый компонент, предоставляющий трансформацию в мире (местоположение, вращение и масштаб). Для Акторов является корневым компонентом по умолчанию.
- Static Mesh — отображает статическую 3D-модель (mesh). Используется для отображения статических объектов в сцене.
- Skeletal Mesh — отображает скелетную 3D-модель и воспроизводит её анимации.
- Spring Arm — компонент, удерживающий свои дочерние элементы на заданном расстоянии от родительского. Однако при столкновении с другими объектами на игровом уровне он стремится сократить это расстояние, чтобы избежать столкновений.
- Camera Component — представляет камеру. Используется для определения точки зрения игрока или наблюдателя.
- Character Movement — специальный компонент для Blueprint-класса Character. Обрабатывает логику передвижения персонажа, включая ходьбу, падение, плавание, полёт, прыжки. И всё это с учётом репликации для многопользовательского режима.
- Capsule Component — простая коллизия (Simple Collision) в виде капсулы, используемая в качестве Root Component в классах Character и требуемая для корректной работы компонента Character Movement.
- Floating Pawn Movement — обрабатывает логику простого перемещения для любого класса Pawn без учёта гравитации.
- Movement Component — специальный компонент для Blueprint-класса Default Pawn, обрабатывающий логику перемещения (полёта) без учёта гравитации. Аналог компонента Floating Pawn Movement.
- Interp To Movement — перемещает корневой компонент между двумя и более точками за заданный промежуток времени.
- Projectile Movement — специализированный компонент для создания движения снарядов. Обновляет позицию другого компонента (обычно корневого, но не всегда) во время очередного такта (тика) обновления экрана игры.
- Rotating Movement — выполняет непрерывное вращение компонента с заданной скоростью.
- Box / Sphere / Capsule Component — простая коллизия (Simple Collision) в виде куба, сферы или капсулы, используемая для обнаружения столкновений с другими объектами.
- Point Light — компонент освещения, излучающий свет из одной точки равномерно во всех направлениях.
- Spot Light — компонент фонаря, излучающий направленный свет в форме конуса.
- Audio Component — воспроизводит звук.
- Widget Component — создаёт поверхность в трёхмерной среде для отрисовки виджетов.
- Billboard — 2D-текстура, которая всегда отрисовывается лицевой стороной к камере.
- Particle System (Cascade / Niagara) — отображает эффекты частиц (дым, огонь, дождь).
- Text Render — отрисовывает в игровом мире текст с заданными настройками шрифта.
- Arrow — простая стрелка, отрисовываемая с помощью линий. Используется для указания стороны, в которую обращён объект.
- Pawn Sensing — компонент, содержащий сенсорные функции (зрение и слух), а также функции Актора, позволяя ему видеть / слышать объекты Pawn в мире.
- Pawn Noise Emitter — генерирует шум, который воспринимает компонент Pawn Sensing.
Совет. Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.