- Что такое Unreal Engine Blueprint (для UE4 и UE5)
- Что выбрать для создания игры в Unreal Engine — язык C++ или Blueprint
- Скорость работы игры
- Сложность разработки игры
- Базовые элементы Unreal Engine Blueprint
- Components
- Construction Script
- Event Graph
- Blueprints Functions
- Variables
- Типы блюпринтов в Unreal Engine (UE4, UE5)
- Blueprint Class
- Level Blueprint
- Blueprint Interface
- Blueprint Macro Library
- Animation Blueprint
Приветствую, друзья, с Вами Будуев Антон. В данной статье мы подробно поговорим о том, что такое визуальный язык программирования Unreal Engine Blueprint (для UE4 и UE5). Из каких основных элементов он состоит. Какие типы блюпринтов существуют. И как Blueprints можно сочетать с языком программирования С++.
Что такое Unreal Engine Blueprint (для UE4 и UE5)
Unreal Engine — это игровой движок, который позволяет нам создавать собственные видеоигры. Как мы можем это сделать? Очевидно, что для этого необходимо написать программный код. Сам движок Анрил Энджин создан на языке программирования C++. Таким образом, используя этот движок, его многочисленные функциональные модули и язык C++, мы можем написать свою игру.
Однако есть одна проблема. Несмотря на то, что С++ является одним из самых популярных языков программирования, он также считается одним из самых сложных языков для изучения и понимания.
Чтобы упростить процесс создания игр и сделать его более доступным, разработчики Unreal Engine создали систему Blueprints. Она предназначена не только для программистов, но и для других специалистов самого широкого профиля. Таких как аниматоры, художники, дизайнеры и Level-артисты, которые могут использовать её для быстрого прототипирования игровых механик и настройки разных функциональностей движка. Благодаря Blueprints, Unreal Engine стал доступным для широкого круга пользователей. Включая независимых разработчиков и небольшие студии по всему миру.
Итак, Blueprints visual scripting (блюпринт-чертежи) — это визуальный язык программирования (скриптинга), который используется в движке Анрил Энджин (в версиях UE4 и UE5). Он позволяет создавать игровые механики без необходимости писать код на C++.
Для программирования механик разработчик создаёт чертеж визуального скрипта. Который состоит из готовых визуальных нод (узлов, блоков) и связей между ними («проводов», линий). Ноды могут быть как стандартными, входящими в состав Unreal Engine, так и созданными самим разработчиком. Но опять же, на основе уже готовых, стандартных нод.
Каждая нода имеет свой особый функционал, который заранее прописан создателями движка. Это может быть расчет координат, прыжки, математические вычисления и многое другое. Соединяя ноды между собой различными способами, а также встраивая в чертеж свои собственные ноды с уникальным функционалом, мы можем создавать логику для игровых объектов.
Иначе говоря, Blueprints — это логические скрипты, состоящие из последовательностей нод, которые определяют поведение объектов в игровом мире и их взаимодействие друг с другом. Скрипты, которые задают ответные действия объекта на различные игровые события.
Таким образом, создать игру на скриптах Blueprints в Unreal Engine теперь может абсолютно каждый, используя их словно как конструктор. Этот инструмент позволяет абсолютно любым разработчикам самостоятельно программировать различные игровые сценарии. А также использовать дополнительные профильные инструменты, которые ранее были доступны только программистам.
Конечно, для работы с Blueprints в UE5 (UE4) нужно научиться работать с этими чертежами. Однако это гораздо проще, понятнее и быстрее, чем изучение языка программирования C++.
Что выбрать для создания игры в Unreal Engine — язык C++ или Blueprint
Важно осознавать, что нет необходимости делать категоричный выбор — разрабатывать игру только на C++ или только с помощью Blueprints. Более того, создание игры исключительно на C++ в настоящее время уже практически невозможно. Это связано с тем, что многие инструменты и функциональные возможности движка Unreal Engine основаны на блюпринт-чертежах.
Сейчас вопрос может звучать так: «Создаём игру только с помощью Blueprints или же, помимо них, используем ещё и C++?».
При принятии решения об использовании языка C++ в дополнение к скриптам важно учитывать два основных аспекта программирования:
- сложность разработки игры (на Blueprints разрабатывать легче)
- скорость работы самой игры (на С++ скорость работы выше)
Помимо этих двух факторов, также многое зависит от сложности самой игры и состава команды разработчиков. Если в команде будет больше художников (аниматоров и других специалистов), чем программистов, то, вероятно, в проекте будет больше чертежей Blueprints, чем кода на C++. В то же время, если в команде много программистов, они, скорее всего, будут стремиться многое сделать на C++.
Компания Epic Games, разработчик движка Анрил Энджин, вообще процесс в больших студиях видит так: создатели контента разрабатывают сложную игровую схему на доступном для них инструменте программирования — блюпринтах. А программист, в свою очередь, далее оптимизирует и упрощает эти чертежи, но уже на коде C++. Таким образом, часть функциональности переносится в новый код на C++.
То есть, в крупных проектах на Unreal Engine хорошей практикой было бы сначала широко использовать Blueprints, а затем, по мере усложнения всего проекта, переносить большие и сложные игровые элементы на C++.
В инди играх можно и вовсе ограничится только блюпринт-чертежами.
Скорость работы игры
В плане скорости работы самой игры, выполнение скриптов Blueprints происходит медленнее, чем исполнение кода на C++. Но это вовсе не означает, что производительность игры на визуальных скриптах низкая. Просто если в игре нужно выполнить сложные вычисления с учетом высокой частоты кадров, возможно, в этих моментах стоит рассмотреть использование C++ вместо скриптовых чертежей.
Как я уже писал выше, можно совместить эти два подхода. Если у Вас есть Blueprint со множеством функций, Вы можете некоторые из них перенести в C++, чтобы ускорить работу. Например, если при профилировании Вы обнаружили, что какая-то операция в скриптах выполняется долго, подумайте о том, чтобы перенести её в C++. А остальные функции оставьте на блюпринтах для удобства редактирования и изменения.
Примером игрового проекта, который требует больших ресурсов на расчеты, может служить массовая система, управляющая тысячами игроков одновременно. В таких случаях для повышения производительности можно перенести процесс принятия решений, трассировку и другие массовые функции на C++. А остальное оставить на скриптовых чертежах.
Сложность разработки игры
На визуальных сценариях Blueprints в Unreal Engine разрабатывать игру гораздо легче и быстрее, чем писать код на C++.
Однако стоит отметить, что есть задачи, которые проще решить на C++, чем на блупринтах. Например, математические операции над большими наборами данных требуют более глубокого понимания кода. В визуальной системе следить за такими операциями может быть затруднительно. Поэтому для этих задач C++ может оказаться более подходящим выбором, поскольку код на этом языке легче читать и понимать. Это ещё один аргумент в пользу того, что разработку массовой системы в больших проектах лучше проводить на C++, а не на блупринтах.
Для небольших же игровых проектов и инди-разработчиков, Blueprints — это «спасательный круг», позволяющий достаточно быстро вести разработку и легко конкурировать с AAA-играми.
Базовые элементы Unreal Engine Blueprint
В движке Анрил Энджин существует несколько типов Blueprints. Их функциональность определяется внутренними составляющими элементами (объектами). Некоторые из которых присутствуют по умолчанию. В то время как другие могут быть добавлены по мере необходимости.
О конкретных типах чертежей мы поговорим ниже, в следующем разделе. А сейчас подробнее остановимся на базовых элементах, которые входят в состав блюпринтов в UE5 (UE4): Components, Construction Script, Event Graph, функции и переменные.
Components
Components — окно компонентов. Позволяет добавлять стандартные и пользовательские компоненты в Ваш Blueprint.
Компонент — это часть готовой логики и функциональности, которая может быть добавлена к любому из Ваших чертежей, например:
- Capsule Components, Box Components, Sphere Components — компоненты, с помощью которых можно добавить к игровому объекту коллизии (геометрию столкновений и пересечений) в форме капсулы, бокса или сферы;
- Static Mesh Components, Skeletal Mesh Components — добавление к объекту визуализируемой геометрии в виде статической или скелетной сетки (Mesh);
- Movement Components — добавление функциональности управления движением объекта;
- Audio, Light и многие другие компоненты, добавляющие новую функциональность.
Компоненты с готовой функциональностью уже заранее встроены в игровой движок. Вы можете использовать их в любых блюпринтах. Также имеется возможность создавать свои собственные компоненты, чтобы затем использовать повторно в любых проектах на Анрил Энджин.
Construction Script
Construction Script — специализированная функция, запускающая после инициализации списка Components сценарий построения блюпринта. Выполняется всякий раз, когда Blueprint размещается в игровом мире или модифицируется в Unreal Editor.
Данная функция представляет собой набор узлов (нодов), с помощью которых разработчик может задать действия, которые нужно выполнить всего один раз при создании объекта в игровом мире. Этот процесс часто используется для процедурного расчёта геометрии объекта. Например, для процедурного расчета нужного количества и координат месторасположения деревьев на игровой сцене.
Итак, Construction Script в UE5 (UE4) позволяет еще до основной работы Blueprints выполнять в игровом мире несколько важных действий:
- настраивать компоненты внутри блюпринта на основе значений публичных глобальных переменных;
- процедурно создавать новые компоненты и игровой контент;
- модифицировать схему чертежей на основе данных игрового мира (например, в зависимости от результатов трассировки линий).
Event Graph
Event Graph — это график событий, который является основным инструментом в Blueprints Unreal Engine. Именно в нём происходит «магия» визуального программирования скриптов. В Event Graph можно размещать множество цепочек узлов, чтобы создать различные варианты поведения объекта в зависимости от игровых событий и обеспечить ветвление логики.
Event Graph реагирует на различные события (пользовательские или стандартные от Unreal Engine). И запускает на выполнение соответствующие событиям последовательность нод (блоки кода). Иначе говоря, запускает определенный скриптовый код в ответ на игровые события.
Если Construction Script работает только во время создания или пересчета объекта, то Event Graph работает все то время, пока запущена сама игра. Обрабатывая в реальном времени различные игровые события и, в зависимости от исхода этих событий, запуская определенный код.
Blueprints Functions
Functions (функции) — это набор взаимосвязанных общей целью узлов, находящихся внутри отдельного элемента блюпринта.
Функции в блюпринтах создаются для нескольких целей:
- для повторно используемого кода;
- как удобный способ упорядочить разрозненную информацию в единый смысловой блок;
- для вызова этого смыслового блока кода совершенно из другого Blueprint.
Иначе говоря, функции позволяют разработчикам инкапсулировать определенный смысловой код. И использовать его повторно в разных элементах блюпринта. В Event Graph, Construction Script и в составе других функций. А также вызывать исполнение этого кода совершенно из других Blueprint классов.
Variables
В Unreal Engine переменные используются для хранения данных. Эти данные могут быть числами, строками, текстом, координатами, логическими значениями или ссылками на другие объекты. Ссылки могут указывать на различные объекты: от компонентов того же самого блупринта до совершенно других Actors в мире.
Переменные могут использоваться как внутри самого блюпринта, так и за его пределами в редакторе Unreal Editor. Это позволяет дизайнерам, работающим в игровом мире с экземплярами Blueprint, быстро настраивать эти объекты, просто изменяя значения переменных.
Типы блюпринтов в Unreal Engine (UE4, UE5)
В движке Анрил Энджин существует несколько типов блюпринт-чертежей, каждый из которых используется в определённых целях.
Blueprint Class
Наиболее распространённым типом является Blueprint Class или по «народному» просто блюпринты. Это пользовательские дочерние классы. Они позволяют легко добавлять новую функциональность к стандартным родительским классам игрового движка: к Actor, Pawn, Character, Player Controller и другим классам.
С помощью блюпринтов в Анрил Энджин создают практически все интерактивные и движущиеся объекты игрового мира:
- раскрывающие двери, шкафы, окна, крышки;
- выключатели;
- собираемые предметы;
- разрушаемые декорации;
- игровые персонажи;
- и многое-многое другое, что движется, открывается, ломается…
В общем, именно через Blueprint Class создаются все интерактивные объекты с внутренней логикой, которые нужно разместить в игровом мире.
Level Blueprint
Level Blueprint — это специализированный тип чертежа. Он действует как глобальный график событий (Event Graph) на текущем игровом уровне (игровой карты).
В Unreal Engine для каждого уровня по умолчанию создаётся отдельный «левел-блюпринт», который нельзя создать вручную. «Левел-чертежи» используются для настройки функциональностей, которые зависят от конкретного уровня и присущи только ему. Например, для настройки:
- зоны триггеров на уровне;
- звука, воспроизводимого на уровне только в определенных местах;
- создания (spawn) объектов на уровне;
- и прочего, что привязано к конкретному игровому уровню.
Blueprint Interface
Blueprint Interface — это тип ассета (тип ресурса), в котором прописываются только названия функций (с учетом входящих и исходящих параметров). Сама реализация этого интерфейса (то есть определение кода тела функции) уже производится в конкретном блюпринте. Причем реализация конкретного интерфейса в блюпринтах может быть разной. То есть названия функций будут одинаковыми, а тело функций — разными.
Blueprint Interface могут создаваться разработчиками с помощью редактора аналогично другим блупринтам, но со следующими ограничениями:
- нет возможности добавлять новые переменные;
- нельзя редактировать график узлов;
- нет возможности добавлять компоненты.
В целом же, цель интерфейсов — это взаимодействие разных Blueprints друг с другом. Особенно этот способ эффективен, когда один блюпринт взаимодействует со множеством других.
Blueprint Macro Library
Blueprint Macro Library — это контейнер, содержащий набор макросов или автономных графиков. Данные макросы можно использовать в качестве узлов в других Blueprints, что позволяет сэкономить время. То есть, библиотеку макросов используют для хранения часто используемого кода узлов (нод). Который впоследствии можно использовать совершенно в разных классах Blueprints.
Макросы являются общими для всех графиков чертежей, которые ссылаются на них. Это означает, что если изменить последовательность узлов в макросе, то эти изменения кода также коснутся и всех блюпринтов, где используются данные макросы. Но эти изменения станут доступны только после перекомпиляции блюпринта.
Animation Blueprint
Animation Blueprint — это специализированные чертежи, которые управляют анимацией персонажа во время симуляции или игрового процесса. Анимационные блюпринты редактируются внутри отдельного редактора Animation Blueprint Editor. В нем Вы можете смешивать анимацию или управлять костями скелета. А также создавать логику, которая определит конечную позу анимации для скелетной сетки персонажа.
На этом наша статья завершается. Мы рассмотрели основы визуального скриптинга Unreal Engine Blueprint. Узнали из каких основных элементов он состоит. Какие типы блюпринтов доступны и как визуальные скрипты можно использовать совместно с языком программирования C++.