Введение
В Unreal Engine 5, Блюпринты являются одним из основных инструментов для создания игровой логики без необходимости писать код на C++. Блюпринты позволяют разработчикам создавать, настраивать и контролировать многие аспекты игровых объектов и окружающей среды. Однако, чтобы полностью раскрыть потенциал блюпринтов, необходимо понять, как они могут взаимодействовать друг с другом.
Переменные
Переменные являются одним из основных способов взаимодействия между Блюпринтами. Переменная, объявленная в одном Блюпринте, может быть доступна для других Блюпринтов. Это позволяет передавать информацию между различными объектами в игре.
Для последующих манипуляций создадим переменную типа Actor.
Касты (Cast To)
Операция "Cast To" используется для обмена данными и вызова функций между различными блупринтами. Кастинг, или приведение типов, это процесс проверки, может ли один тип данных (в данном случае Actor) быть "преобразован" в другой. Это позволяет нам обращаться к специфическим свойствам и функциям, которые присутствуют в целевом Блюпринте.
Для использования "Cast To", вам нужно будет указать Class, к которому вы хотите привести, и объект, который вы пытаетесь привести к этому типу. Если приведение типов проходит успешно, то вы сможете использовать все доступные для данного типа Блюпринта функции и переменные.
Определение целевого объекта
Перед тем как использовать Cast To, вам нужно определить объект, который вы хотите привести. Это может быть любой объект в вашей игре, но обычно это будет объект, с которым взаимодействует игрок, или другой объект в мире игры.
Возьмем для примера использования куб со сцены
Использование каста
После того как вы определили объект, вы можете использовать Cast To, чтобы привести этот объект к нужному классу. Это делается путем перетаскивания линии из вашего объекта и выбора "Cast To [имя класса]" из меню. Затем, если приведение успешно, вы можете использовать любые функции или свойства этого класса.
В коде мы просим выбранный объект скатится и запустить физику у статического компонента.
Частые ошибки при использовании Cast To
Одна из самых распространенных ошибок при использовании Cast To - это попытка привести объект к неправильному классу. Если вы пытаетесь привести объект к классу, экземпляром которого он не является, Cast To не будет работать. Это часто происходит, когда вы пытаетесь привести объект к подклассу, вместо его базового класса.
В этом случае сигнал пойдет по ветке failed.
Другая распространенная ошибка - это попытка использовать Cast To без предварительной проверки, существует ли объект. Если вы пытаетесь привести null или неинициализированный объект, ваш Cast To вызовет ошибку.
События и делегаты
События и делегаты являются еще одним способом взаимодействия между Блюпринтами. События позволяют Блюпринтам реагировать на определенные вещи, происходящие в игре, такие как взаимодействие игрока с объектом, начало и окончание уровня, и так далее.
Делегаты, с другой стороны, позволяют определить сигнатуру функции, которую затем можно связать с различными методами. Это позволяет создавать более обобщенные и гибкие системы, где разные объекты могут реагировать на события разными способами.
Создание пользовательских событий
Создание собственного события в Блюпринте достаточно просто. Во-первых, вам нужно будет открыть окно редактора Блюпринтов и перейти во вкладку "Event Graph". Затем вы можете щелкнуть правой кнопкой мыши в пустом пространстве и выбрать "Add Custom Event". Это создаст новый узел события, который вы можете назвать и настроить по своему усмотрению.
Вызов событий
Вызов события также достаточно прост. Вам просто нужно перетащить линию из любого другого узла и выбрать ваше созданное событие из списка. Затем, когда условия для этого узла будут выполнены, ваше событие будет вызвано.
События актора и компонента
Unreal Engine также предоставляет ряд встроенных событий, которые связаны с жизненным циклом акторов и компонентов в игре. Например, у каждого актора есть события "Begin Play" и "End Play", которые срабатывают в начале и в конце жизни актора соответственно.
События компонентов включают такие события, как "Actor Begin Overlap" и "Actor End Overlap", которые срабатывают, когда другой актор начинает и заканчивает пересечение с коллизионным объемом компонента.
Эти события можно использовать для создания различных интерактивных механик, таких как открытие дверей, активация ловушек и многое другое.
Создание делегатов
В Unreal Engine, Event Dispatchers являются одним из типов делегатов.
Event Dispatcher - это объект в блупринте, который может вызывать события и привязывать к ним функции из других блюпринтов. Они позволяют создавать гибкие и модульные системы, где разные объекты могут реагировать на события разными способами.
Создать Event Dispatcher в блупринте достаточно просто. Вам нужно будет открыть окно редактора блупринтов, перейти во вкладку "Event Dispatchers" и нажать на кнопку "+" для добавления нового Event Dispatcher. Затем вы можете переименовать его и определить параметры, которые будут передаваться при вызове события.
Привязка функций к Event Dispatcher
Для привязки функции к Event Dispatcher в другом блупринте, вам нужно вызвать функцию "Bind Event to [Имя вашего Event Dispatcher]". В качестве параметра "Event" вы должны использовать событие, которое вы хотите привязать.
Обратите внимание, что событие должно соответствовать сигнатуре Event Dispatcher, включая все параметры.
Вызов Event Dispatcher
Чтобы вызвать Event Dispatcher, вы просто вызываете функцию "Call [Имя вашего Event Dispatcher]" в вашем блупринте. Это вызовет все функции, которые были привязаны к данному Event Dispatcher, в порядке их привязки.
Интерфейсы
Интерфейсы в Unreal Engine позволяют определить набор функций, которые должен реализовать класс. Интерфейсы очень полезны при создании систем, которые должны работать с различными типами объектов.
С помощью интерфейсов можно определить общий набор функций, которые затем могут быть реализованы по-разному в различных Блюпринтах. Это позволяет создать универсальные системы, которые могут взаимодействовать с любыми объектами, реализующими определенный интерфейс.
Создание интерфейса
Создание нового интерфейса в Unreal Engine достаточно просто. Вам нужно будет открыть окно редактора Блюпринтов и выбрать "Blueprints" -> "Blueprint Interface".
Затем вы можете добавить функции, которые должны быть реализованы Блюпринтами, которые будут использовать этот интерфейс.
Использование интерфейсов
Чтобы использовать интерфейс в Блюпринте, вы должны добавить его в список интерфейсов Блюпринта. Это делается в окне редактора Блюпринтов, выбрав "Class Settings" -> "Implements Interfaces" -> "Add". Затем вы должны предоставить реализацию для каждой функции, определенной в интерфейсе.
Реализация функции интерфейса не отличается от реализации обычной функции в Блюпринте. Вы просто добавляете новую функцию с тем же именем, что и функция в интерфейсе, и затем добавляете любую логику, которую вы хотите выполнить, когда эта функция вызывается.
Взаимодействие между Блюпринтами с помощью интерфейсов
Одним из главных преимуществ использования интерфейсов является то, что они позволяют вам взаимодействовать с различными Блюпринтами, используя общий набор функций. Когда вы вызываете функцию интерфейса на Блюпринте, Unreal Engine автоматически вызывает соответствующую реализацию функции в этом Блюпринте.
Это означает, что вам не нужно знать точный тип Блюпринта, чтобы взаимодействовать с ним, пока он реализует нужный вам интерфейс. Это делает ваш код более модульным и гибким, поскольку вы можете взаимодействовать с различными Блюпринтами, используя один и тот же код.
Заключение
В Unreal Engine есть множество способов взаимодействия между Блюпринтами. Наиболее распространенными из них являются переменные, касты, события, делегаты и интерфейсы. Использование этих механизмов позволяет создавать сложные, взаимосвязанные системы, где объекты могут обмениваться информацией. Больше о работе Unreal Engine 5 вы можете узнать, например на наших курсах, а прямо сейчас приглашаю вас на бесплатный урок, где расскажем какие ИИ бывают в современных играх и как их можно разделить на группы с точки зрения разработки. Рассмотрим основные составляющие ИИ в Unreal Engine 5 и как разрабатывается логика для поведения бота. Рассмотрим как создать простого бота, который патрулирует определенную зону.
Комментарии (3)
semenyakinVS
17.05.2023 13:09Статья написана явно для новичков - поэтому, я бы не писал про интерфейсы вообще, либо указал что Unreal чаще опирается на компоненты и механизм GetComponent. Получали как-то legacy от любителей интерфейсов - и это жесть, а не код
AllexIn
CastTo - каварная штука. Избегайте в блюпринтах использования CAstTo к сложным блюпринтам. Кастуйте либо к С++ классу, либо к базовому Блюпринт классу, в котором нет контента.
CastTo требует наличия CDO для блюпринта к которому идет каст.
Пример: у вас есть 10 уровней, в финале каждого стоит босс. Жирный блюпринт с мешем, кучей звуков, кучей анимаций и вот это всё.
Вы решили в каком-то объекте узнать, а что за босс на этом уровне. И выбрали путь проверки через каст. То есть кастуем к Boss1, фейл - значит кастуем к Boss2 и так для всех.
Все хорошо. Но объект реализующий такую логику загрузит все 10 объектов боссов, со всем их контентом. У вас фактически на уровне 1 босс, а загружены будут все.
Поэтому кастуем к С++ классу(это бесплатно, потому что для всех С++ классов CDO создается в любом случае).
Либо кастуем к базовым блюпринтам с минимум контента, которые либо и так есть на уровне, либо очень дешево грузить.
P.S. Кстати, тот факт что CDO Для С++ классов создается всегда - намекает, что грузить контент в конструкторах С++ классов плохая идея в большинстве случаев.