Components в Unreal Engine — разбираем Blueprint компоненты в UE5 (UE4)

Друзья, приветствую, с Вами Будуев Антон. В данной статье мы обсудим концепцию компонентов в Unreal Engine (UE5, UE4). Разберём в целом, что это такое Component, а также базовые классы, иерархию и основные часто используемые типы компонентов.

Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.

Unreal Engine Component

Components или компоненты в Unreal Engine — это модули готовой функциональности, которые можно добавить к Актору как под-объекты для расширения возможностей Актора. Компонент можно представить как отдельную деталь, которая прикрепляется к более крупному объекту, давая ему новые свойства и поведение.

Components (компоненты) в составе Актора персонажа
Components (компоненты) в составе Актора персонажа

Когда Component добавляется к Актору, то данный Актор может свободно использовать функционал, предоставляемый этим компонентом, например:

  • Актор, имеющий компонент точечного освещения, будет способен излучать свет.
  • Компонент движения заставит объект Актора двигаться.
  • Аудиокомпонент даст возможность Актору воспроизводить звуки.

Component — это, по сути, готовый составной блок или часть Актора, которая отвечает за реализацию в нём конкретной задачи, функциональности или поведения, позволяя ему взаимодействовать с миром.

Например, как компьютер состоит из готовых компонентов, каждый со своей функциональностью, таких как оперативная память, жесткий диск, процессор и так далее. Так и Актор, представляющий, к примеру, игрового персонажа, может состоять из отдельных компонентов: Skeletal Mesh (визуальное представление персонажа), Capsule Component, позволяющий персонажу взаимодействовать с игровым миром, Camera Component, дающего возможность наблюдать игроку за игрой или компонента движения, с помощью которого персонаж будет передвигаться.

В отличие от Акторов, компоненты не могут существовать сами по себе. Они обязательно должны быть прикреплены к Actor.

В Unreal Engine компоненты не существуют сами по себе, а всегда являются частью конкретного Актора. При создании экземпляра Актора в игре для него создаётся свой уникальный, индивидуальный экземпляр каждого компонента, привязанного к этому Актору, с собственными свойствами и состоянием.

Это значит, что если в мире есть несколько экземпляров одного и того же Актора, у каждого из них будут независимые объекты компонентов, которые могут иметь свои собственные значения переменных и состояния. Такая уникальность компонентов реализуется через механизм Instancing — компоненты создаются как инстансы (экземпляры) для каждого Актора, а не как общие объекты для всех.

При этом компоненты не могут существовать вне Актора — они всегда принадлежат конкретному экземпляру Актора и управляются его жизненным циклом.

Static и Dynamic Components

С точки зрения создания компоненты в Unreal Engine делятся на две основные категории — Static Components (статические компоненты) и Dynamic Components (динамические компоненты), которые различаются по способу создания и управлению ими в игре.

Статические компоненты

Static Components (статические компоненты) создаются и инициализируются вместе с Актором, обычно в конструкторе C++ с помощью функции CreateDefaultSubobject() или добавляются в редакторе Blueprint через окно компонентов.

Такие компоненты автоматически регистрируются движком при спавне Актора, что означает, что они сразу становятся частью игрового мира без необходимости дополнительного кода для регистрации.

Они автоматически существуют на сервере и клиентах, так как создаются одновременно при спавне Актора, и не требуют отдельной репликации для своего появления на клиентах. Репликация (синхронизация свойств и событий) статических компонентов нужна только если необходимо передавать изменения их состояния между сервером и клиентами.

Статические компоненты обычно используются для объектов с постоянной геометрией и функциональностью, которые не меняются во время игры. Они обеспечивают стабильное поведение и визуальное представление Акторов, например, здания, стены или предметы окружения.

Динамические компоненты

Dynamic Components (динамические компоненты) создаются и инициализируются во время выполнения игры (Runtime) через код C++ или Blueprint, после чего компонент необходимо вручную прикрепить к Актору (например, через AttachTo) и зарегистрировать в движке, что позволяет ему участвовать в обновлениях сцены, физике и рендеринге.

Такой подход необходим для компонентов, которые появляются, изменяются или удаляются в процессе игры, например, временные эффекты, оружие, частицы или другие объекты, создаваемые по ходу игрового процесса. При этом динамические компоненты требуют дополнительной синхронизации в сетевой игре.

Базовые классы Component в Unreal Engine

В составе Unreal Engine имеется большое количество уже готовых Components. Но мы, как разработчики игр, для удобства и модульности разработки, можем также создавать свои компоненты. Например, можно создать пользовательский компонент здоровья персонажа и затем использовать его повторно при разработке множества персонажей игры, просто настроив индивидуально под каждый из них параметры готового модуля здоровья.

При создании своих собственных компонентов необходимо понимать несколько базовых классов, на основе которых и создаются пользовательские Components: это Актор-компоненты, компоненты сцены и примитивные компоненты.

Actor Component

Actor Component в Unreal Engine
Actor Component в Unreal Engine

Actor Component (Актор-компонент)является базовым классом для всех других классов компонентов. Не имеет свойств трансформации (отсутствие физического местоположения, поворота или масштаба в игровом мире). Но имеет внутри себя функционал обновления при каждом такте игры (Tick).

Данный класс используется для абстрактных действий, таких как перемещение, управление инвентарём или атрибутами, а также для других нефизических концепций. Например, его можно задействовать для компонента здоровья.

В общем, применяется он в тех случаях, когда нужно просто рассчитать какую-либо логику. Примером может служить компонент Character Movement, реализующий логику передвижения персонажа.

Scene Component

Scene Component в Unreal Engine
Scene Component в Unreal Engine

Scene Component (компонент сцены) — является дочерним классом от Actor Component, расширяя его свойствами трансформации (объекты Scene Component имеют конкретные координаты, поворот и масштаб в игровом мире). Но при этом объекты этого класса не имеют свойств для физической визуализации на игровом уровне.

Основная задача компонентов данного класса — поддерживать поведение, основанное на местоположении, которое не требует геометрического представления. Например, с помощью этого класса компонентов можно реализовывать звук, свет, физические силы и ограничения, пружинные рычаги для присоединения камеры и так далее.

Наиболее известные готовые компоненты этого класса — это Camera Component, Camera Shake, Point Light, Spot Light, Sky Light и другие.

Primitive Component

Primitive Component в Unreal Engine
Primitive Component в Unreal Engine

Primitive Component (примитивный компонент) — абстрактный дочерний класс от Scene Component. Содержит данные о столкновениях (коллизии), функционал для генерации геометрии и рендеринга визуальных элементов.

Являясь абстрактным классом, используется только для создания новых классов компонентов, то есть, напрямую объект компонента Primitive Component создать нельзя.

Наиболее известные готовые дочерние компоненты этого класса — Niagara, Static Mesh, Skeletal Mesh, Widget и другие.

Иерархия Component

При добавлении компонентов в Actor, используя кнопку + Add в окне Components, Unreal Engine организует их в четкую иерархическую структуру. Эта структура критически важна для управления и взаимосвязи компонентов внутри Актора.

Если добавляемый компонент принадлежит к классу Actor Component, то есть внутри него отсутствует визуализация и трансформация, то такие компоненты в этом окне добавляются в самый низ, а в Blueprint-классах Character они добавляются под чертой.

Например, компонент Character Movement не имеет трансформации и принадлежит к классу Actor Component, поэтому он всегда находится ниже черты.

Компонент Character Movement в Unreal Engine является классом Actor Component, поэтому он находится ниже черты
Компонент Character Movement в Unreal Engine является классом Actor Component, поэтому он находится ниже черты

Компоненты, унаследованные от Scene Component, обладающие встроенной трансформацией (позицией, вращением и масштабом), отображаются выше черты в окне Components и выстраиваются в иерархию с чёткими родительско-дочерними связями, где один компонент может быть вложен в другой, начиная от самого первого корневого компонента.

Родительский компонент помечается значком перевернутого треугольника, а дочерние компоненты сдвинуты правее родительского, что визуально отображает иерархию.

Изменение свойств трансформации (масштаб, положение, вращение) в родительском компоненте автоматически влияет на все его дочерние компоненты. Это позволяет легко управлять целыми группами компонентов одновременно. При этом изменение свойств трансформации в дочерних компонентах не влияет на родительские или другие смежные дочерние компоненты этого родителя.

Компонент Sphere является родительским для Sphere1 и Sphere2. При изменении масштаба у родительского элемента, масштаб автоматически меняется и у дочерних.
Компонент Sphere является родительским для Sphere1 и Sphere2. При изменении масштаба у родительского элемента, масштаб автоматически меняется и у дочерних.

Default Scene Root Component

У каждого Actor также имеется Root Component (корневой компонент) — свойство, указывающее, какой компонент является корневым для текущего Актора. Все остальные компоненты Актора (например, меши, камеры, коллайдеры) прикрепляются к Root Component, образуя иерархию.

Default Scene Root Component
Default Scene Root Component

Сами Акторы не имеют свойства трансформации, следовательно, не имеют координат местоположения, значений поворота или масштаба. Вместо этого они используют данные о трансформации от своих компонентов, а точнее, от своего 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, а тот, который Вы назначили.

Изменение Root Component в Unreal Engine: компонент Sphere необходимо перенести поверх DefaultSceneRoot, тогда Sphere станет корневым компонентом и именно от него Актор будет использовать значения трансформации
Изменение Root Component в Unreal Engine: компонент Sphere необходимо перенести поверх DefaultSceneRoot, тогда Sphere станет корневым компонентом и именно от него Актор будет использовать значения трансформации

Ключевые особенности компонентов

Подытожим ключевые особенности и характеристики компонентов в Blueprints движка Анрил Энджин:

  • Функциональность — каждый компонент отвечает за определенный аспект поведения Актора, например, рендеринг, коллизию, звук, ввод, физику и так далее.
  • Модульность — компоненты позволяют разделить сложную функциональность на более мелкие и управляемые блоки.
  • Многоразовое использование — компоненты можно использовать в разных Actor.
  • Настраиваемость — компоненты можно настраивать через параметры, позволяя создавать различные варианты поведения.
  • Вложенность — компоненты могут быть вложены друг в друга, что позволяет создавать сложные иерархии.
  • Зависимость от Actor — компоненты не могут существовать вне Actor.
  • Root Component — в любом Акторе обязательно должен присутствует корневой компонент, от которого Актор берёт значения трансформации в игровом мире.

Создание пользовательских Components

Пользовательские компоненты в Unreal Engine создаются точно так же, как и другие Blueprint-классы. А именно, необходимо кликнуть по кнопке Blueprint class в контекстном меню Content Browser. Далее в открывшемся окне Pick Parent Class выбрать нужный Вам класс компонента. Для этого можно воспользоваться быстрыми кнопками Actor Component и Scene Component, или же в поле поиска просто ввести слово Component.

Как создать пользовательский Component в UE5 (UE4)
Как создать пользовательский Component в UE5 (UE4)

Типы Components в Unreal Engine

Unreal Engine (UE4, UE5) предоставляет множество встроенных готовых компонентов, которые можно использовать в своих проектах. Рассмотрим кратко некоторые из наиболее распространенных типов Components:

  • Scene — базовый компонент, предоставляющий трансформацию в мире (местоположение, вращение и масштаб). Для Акторов является корневым компонентом по умолчанию.
  • Static Mesh — отображает статическую 3D-модель (Mesh). Используется для отображения статических объектов в сцене.
  • Skeletal Mesh Component — отображает скелетную 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 Collision — простая коллизия (Simple Collision) в виде куба, сферы или капсулы, используемая для обнаружения столкновений с другими объектами.
  • Point Light — компонент освещения, излучающий свет из одной точки равномерно во всех направлениях.
  • Spot Light — компонент фонаря, излучающий направленный свет в форме конуса.
  • Audio Component — воспроизводит звук.
  • Widget Component — создаёт поверхность в трёхмерной среде для отрисовки виджетов.
  • Billboard2D-текстура, которая всегда отрисовывается лицевой стороной к камере.
  • Particle System (Cascade / Niagara) — отображает эффекты частиц (дым, огонь, дождь).
  • Text Render — отрисовывает в игровом мире текст с заданными настройками шрифта.
  • Arrow — простая стрелка, отрисовываемая с помощью линий. Используется для указания стороны, в которую обращён объект.
  • Pawn Sensing — компонент, содержащий сенсорные функции (зрение и слух), а также функции Актора, позволяя ему видеть / слышать объекты Pawn в мире.
  • Pawn Noise Emitter — генерирует шум, который воспринимает компонент Pawn Sensing.

Совет. Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.


наш Телеграм канал

Оцените статью
( 4 оценки, среднее 5 из 5 )
Поделитесь этой статьей со своими знакомыми в социальных сетях, возможно, эта статья кому-то будет полезна
Unreal Engine - это просто
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.