Blueprint Class в Unreal Engine. Родительские и дочерние классы в UE5 (UE4)

Друзья, приветствую, с Вами Будуев Антон. В данной статье мы поговорим об одном из самых распространенных типов ассетов движка Unreal Engine (UE4, UE5) — Blueprint Class. А также разберем основные родительские классы движка (Actor, Pawn, Character, Player Controller и другие), на основе которых создаются практически все пользовательские блюпринты.

Blueprint Class в Unreal Engine

Blueprint Class в Unreal Engine или по «народному» просто блюпринты — это ассеты (внутренние файлы движка), которые содержат в себе данные (компоненты и свойства), а также логику (скрипты Blueprints), управляющую этими данными в ответ на события, происходящие в игровом мире.

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

Все Blueprint Class являются пользовательскими дочерними классами, которые позволяют легко добавлять новую функциональность, а также новые данные к стандартным родительским классам движка Анрил Энджин. А после, позволяют на их основе создавать в игровом мире множественные объекты. Где каждый объект, содержащий в себе данные и Blueprint логику, может при помощи этой логики изменять свои внутренние данные в ответ на игровые события.

Например, когда игрок нажимает на клавиатуре клавишу пробела, игровой объект, представляющий персонажа, может отреагировать на это игровое событие и изменить свои внутренние данные с помощью логики Blueprint. А именно, он может изменить данные анимации с покоя на прыжок, а также изменить свои данные координат в мире — переместиться вверх, а затем снова вниз, что сымитирует прыжок.

Чтобы понять, что такое родительские и дочерние классы, давайте немного углубимся в тему объектно-ориентированного программирования (ООП).

Объектно-ориентированное программирование в Анрил Энджин

Как и во многих популярных языках программирования, в игровом движке Unreal Engine применяются принципы ООП.

Объектно-ориентированное программирование в Анрил Энджин — это подход к разработке игр, в котором элементы игрового мира представлены в виде объектов. Их структура, свойства и поведение определяются классом, к которому они принадлежат.

То есть, все интерактивные объекты в игре, имеющие внутри себя определенную логику поведения, являются одним из экземпляров конкретного Blueprint Class.

Blueprint Class – это схема (чертеж) для создания объекта, имеющего в себе определенную логику. Схема содержит подробное описание своих будущих экземпляров в игровом мире. Определяет их поведение, структуру и состав данных.

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

То есть, любой Blueprint Class содержит набор обязательных элементов: данные, свойства и методы (функции), которые будут определять характеристики экземпляров этого класса и их поведение.

Например, возьмем класс «Собака». У собаки есть характеризующие ее свойства (параметры):

  • кличка;
  • пол;
  • возраст;
  • цвет.

А также методы (ее функции). То есть то, что она умеет делать:

  • лаять;
  • бегать;
  • прыгать.

Соответственно, имея один общий Blueprint Class «Собака», в Unreal Engine мы можем создать множество различных объектов собак. И поместить этих конкретных собак в игровой мир.

У всех представителей блюпринта «Собака» будут одинаковые свойства, но значения этих свойств будут различаться. Например, у всех собак будет свойство «Кличка», но у каждой собаки кличка будет своей: у одной — «Шарик», у другой — «Васька».

То же самое и с функциями. У всех экземпляров класса «Собака» будет функция «Бегать». Однако каждая конкретная собака будет бегать, то есть исполнять свою функцию, по-разному: одна быстро, другая медленно, а третья, возможно, будет хромать.

Принципы наследования

Все Blueprint Class в Анрил Энджин поддерживают иерархию наследования.

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

То есть, в дочерних классах можно:

  • добавлять новые параметры, свойства и методы;
  • заменять алгоритмы методов родительского класса.

Но, важный момент, в дочерних Blueprint Class нельзя удалять родительский функционал. Заменять можно, а удалять нет.

В итоге, наследование значительно упрощает разработку игр в Unreal Engine, так как позволяет избежать повторного написания одного и того же кода.

В качестве примера наследования рассмотрим транспортные средства: автомобиль и самолёт. И автомобиль, и самолёт могут перевозить людей и грузы. Однако способы их передвижения различаются. Таким образом, у них есть как общие, так и отличительные характеристики.

Соответственно, мы можем определить один общий родительский Blueprint Class «Транспорт», у которого будут общие свойства:

  • цвет;
  • количество пассажиров;
  • максимальная грузоподъемность.

Далее, на основе родительского блюпринта «Транспорт» можно создать два дочерних: «Машина» и «Самолет». В этих классах мы можем описать методы, которые будут уникальными для каждого из них. Например, для класса «Машина» можно определить метод «Ездить», а для самолета — функцию «Летать».

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

Принципы инкапсуляции в Blueprint Class

Также в Blueprint Class реализуется принцип инкапсуляции (encapsulate — «поместить в капсулу, изолировать»).

Согласно этому принципу ООП, вся важная для существования объекта информация хранится внутри него самого. При этом весь внутренний функционал, свойства и логика скрыты от внешнего мира. И только лишь некоторые функции доступны для взаимодействия с другими объектами игры, в рамках специализированного инструмента Blueprint Interface.

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

То есть, если в проекте на Unreal Engine имеются Blueprint Class «Машина» и «Игрок», то их объекты в игровом мире не должны знать друг о друге абсолютно ничего. Как игрок не должен знать, при помощи каких функций машина передвигается, как она открывает двери. Так и машина не должна знать, как устроены функции ходьбы у игрока и с помощью каких методов игрок садится в машину. А для того чтобы эти классы могли взаимодействовать друг с другом, когда игроку нужно сесть в машину, открыв её дверь, используется уже специальный инструмент Blueprint Interface.

Все принципы ООП характерны не только для Blueprint Class, но и для любых объектов в Unreal Engine.

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

Иначе говоря, ООП — это основа всего игрового движка.

Основные родительские Blueprint Class, встроенные в Unreal Engine

Для удобства разработчиков и экономии их времени, в Анрил Энджин по умолчанию уже определены множество различных родительских классов с заранее подготовленной функциональностью. От которых создаваемый нами Blueprint Class наследует все основные характеристики и функции. Давайте рассмотрим самые основные из них.

Object

Blueprint class Object
Blueprint class Object

Самым базовым родительским классом в Unreal Engine (UE4, UE5) является класс Object.

Именно от него стартует вся иерархия наследования в движке. Он является родительским для 737 других дочерних классов. Экземпляры Object невозможно физически разместить на игровом уровне. А вся функциональность Object сводится к инициализации и базовой подготовке наследуемого объекта:

  • инициализация свойств;
  • приведение типов;
  • сетевая репликация;
  • подсчет ссылок;
  • сборка «мусора» и очистка памяти,
  • и прочая подготовка.

Actor

Blueprint Class ActorActor (актор) — класс, наследуемый от Object, являющийся основным строительным блоком в Unreal Engine.

С Actor можно взаимодействовать. Он создает объект, который можно поместить в игровой мир и хранит в себе набор базовых свойств:

  • Location — координаты в мире (по осям X, Y, Z), Rotation — поворот, Scale — масштаб;
  • функции репликации;
  • методы рендеринга;
  • настройки коллизии, физики;
  • наличие Events (событий) для реакции на внешний мир.

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

Pawn

Класс PawnPawn (павн, пон, пешка) — класс, наследуемый от Actor. Объектами этого класса может «овладевать» (possess) контроллер, получая входные данные (Input) и управляя движением Pawn’a. Управление достигается либо посредством искусственного интеллекта (AI Controller), либо же самим игроком (Player Controller). То есть, основное отличие от Actor — это возможность управления объектом Pawn через контроллер.

Данный Blueprint Class подходит для реализации управляемых объектов: машины, лодки, самолеты, животные, враги и т. д.

Character Blueprint Class

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

Класс Character содержит в себе специализированные компоненты UE5 (UE4), облегчающие создание человеческих или других «двуногих» персонажей:

  • Capsule component (капсульная коллизия) — правила пересечения и столкновения персонажа с другими объектами в мире;
  • Skeletal Mesh («скелетал меш», скелетная сетка) — графическое представление персонажа, а также настройка правил его анимации;
  • Camera (камера) — «глаза» игрока, с помощью которых он видит окружающий мир;
  • Character Movement — настройки движения персонажа (ходьба, бег, прыжки, приседание, плавание, гравитация, сопротивление).

Player Controller

Иерархия класса PlayerControllerPlayerController (контроллер игрока) — Blueprint Class, наследуемый от класса Controller, который, в свою очередь, наследуется от родительского Actor.

Контроллер игрока управляет объектами Pawn или Character, передавая им от игрока (от клавиатуры, мышки, джойстика) входящие данные для движения (Input Action).

Иначе говоря, это своеобразный интерфейс между Pawn (Character) и игроком, управляющим этими объектами. По сути, представляет волю игрока.

Game Mode

Иерархия класса GameModeGameModeBase (GameMode, игровой режим) — это Blueprint Class, наследуемый от родительского класса Info, который в свою очередь, наследуется от Actor. Он может устанавливаться как отдельно для каждого уровня, так и для всего проекта Unreal Engine в целом.

Игровой режим — это набор правил и условий игры, по которым она проходит. Он может включает в себя:

  • порядок присоединения игроков к игре;
  • приостановку игры;
  • переход на другой уровень;
  • правила подсчёта очков;
  • контрольные точки, которые определяют состояние игрового процесса;
  • и другие правила игрового мира.

Game Instance

Blueprint class GameInstanceGameInstance (экземпляр игры)  наследуется от родительского класса Object и содержит информацию о текущем сеансе игры. Экземпляр этого класса создается при запуске игры и существует до тех пор, пока игра не будет завершена.

Game Instance — это единственный Blueprint Class, который существует на протяжении всей игры, независимо от загрузки и выгрузки игровых уровней. Соответственно, в нем можно сохранять любые данные, которые нужно передать между разными игровыми уровнями.

Player State Blueprint Class

Иерархия класса Player StatePlayerState (состояние игрока) — класс, наследуемый от родительского класса Info, который в свою очередь, наследуется от Actor.

В сетевой версии игры экземпляры Player States реплицируются и содержат всю необходимую информацию об игроке, относящуюся к сетевой игре.

В целом может содержать любую информацию о состоянии игрока или бота:

  • имя игрока;
  • количество жизней:
  • количество очков;
  • состояние здоровья;
  • информацию об инвентаре.

Game State

Иерархия блюпринт класса Game StateGameStateBase (GameState, состояние игры) — Blueprint Class, наследуемый от родительского класса Info, который в свою очередь, наследуется от Actor.

В основном Game State используется в сетевых играх. Он содержит в себе информацию о подключенных игроках, их очках и других параметрах. И существует как на сервере, так и на каждом отдельном клиенте. Постоянно синхронизируясь между всеми участниками игры, чтобы все игроки имели актуальную информацию о текущей игре.

Как создать Blueprint Class

Создать Blueprint Class можно несколькими способами: через контекстное меню в «Content Browser» и непосредственно во вьюпорте игрового мира. Рассмотрим эти варианты подробнее.

Content Browser

Контекстное меню создания Blueprint Class в Unreal Engine
Контекстное меню создания Blueprint Class в Unreal Engine

В текущей папке Content Browser щелкните правой кнопкой мыши по пустому полю. Откроется контекстное меню. В нем выберите подменю «Blueprint Class».

Выбор необходимого родительского блюпринт класса
Выбор необходимого родительского блюпринт класса

Далее в открывшемся окне «Pick Parent Class» (выбор родительского класса) выберите нужный родительский блюпринт, на основе которого Вы хотите создать свой. Можно выбрать его из верхнего списка популярных классов или воспользоваться формой поиска. После выбора нажмите кнопку «Select» (выбрать), после чего Blueprint Class будет создан в текущей папке Content Browser.

Viewport игрового мира

Выберите необходимый объект и нажмите на кнопку Convert Actor
Выберите необходимый объект и нажмите на кнопку Convert Actor

Если, находясь в игровом мире, Вам нужно добавить определённую логику для простого Actor, то данный объект необходимо изменить на Blueprint Class. Чтобы это сделать, выберите в игровом мире нужный объект. Затем в разделе Details справа нажмите на кнопку «Convert Actor».

Окно Create Blueprint From Selection
Окно Create Blueprint From Selection

В открывшемся окне «Create Blueprint From Selection» (создать блюпринт из выделенного) выберите кнопку «New Subclass» (новый подкласс). Затем введите нужное название для Вашего блюпринта и нажмите на кнопку «Select» (выбрать).

После этого Actor на сцене будет заменен на Ваш созданный блюпринт. А сам файл ассета блюпринта будет находиться в текущей папке Content Browser.

Как в Unreal Engine создать дочерний Blueprint Class

Создать дочерний Blueprint Class в Unreal Engine
Меню «Создать дочерний Blueprint Class в Unreal Engine»

Чтобы создать дочерний блюпринт на основе уже существующего, откройте Content Browser и выберите нужный родительский класс. Затем, нажав на нем правую кнопку мыши, вызовите контекстное меню и выберите пункт «Create Child Blueprint Class» (создать дочерний блюпринт класс). После этого в Content Browser рядом с родительским блупринтом появится и вновь созданный дочерний.

На этом наша статья завершается. Мы рассмотрели, что такое Blueprint class и принципы объектно-ориентированного программирования в Unreal Engine. Кроме того, мы изучили основные родительские классы в движке, на основе которых создаются практически все пользовательские блюпринты.

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

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