Blueprint Librarium: как сделать телепорт в Unreal Engine

Embedded Image

Одно из преимуществ Unreal Engine — поддержка визуального программирования, или «блюпринтов», которые позволяют без знания языков программирования создавать целые игры. А на нашем курсе GAMEDESIGN даже возникла инициатива Blueprint Librarium, в рамках которой преподаватель и участники делятся своими версиями каких-то полезных механик.

На стриме преподаватель курса Сергей Праздничнов рассказал о том, как с помощью «блюпринтов» сделать простые двери-телепорты. В этом гайде приводим его решение по шагам, а тут вы можете посмотреть его в готовом виде.

Визуальное отображение будущей двери — это блюпринт класса Actor с тремя компонентами:

Static Mesh, которому в одноимённом свойстве можно присвоить любой удобный меш. Например, на стриме Сергей выбрал дверной проём из заготовок Unreal Engine 4.

Box Collision — коллайдер-параллелепипед, при контакте с которым игрок будет телепортироваться. Его нужно растянуть по всему дверному проёму.

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

Поведение «блюпринта» создаётся на вкладке Event Graph. Для начала правой кнопкой мыши нужно щёлкнуть по компоненту Box и в выпадающем меню выбрать Add OnComponentBeginOverlap. Это событие, которое вызывается при соприкосновении с коллайдером, — оно появится в окне Event Graph.

Далее во вкладке Variables нужно создать переменную типа Boolean, которая будет проверять, может ли дверь перенести персонажа, и в зависимости от этого принимать значение True или False, чтобы конечный телепорт не «выкидывал» его обратно. Сергей назвал её bCanTeleport.

Также понадобится переменная TargetPortalDoor типа BP Portal Door — это наша дверь-цель. Здесь при выборе типа в выпадающем меню нужно выбрать Soft Object Reference, а на вкладке Variable поставить галочку в поле Instance Editable (либо нажать на глаз рядом с названием переменной во вкладке Variables слева), чтобы можно было назначить дверь-цель прямо во вьюпорте на сцене.

Обеим переменным в «блюпринте» можно выставить категорию PortalSystem, чтобы потом было проще найти их в списке свойств объекта.

Из пина в ноде OnComponentBeginOverlap нужно «вытянуть» нод Brunch — это местный аналог условного оператора If, который проверяет значение Condition. В нашем случае там должна быть переменная bCanTeleport.

Для этого можно просто перетащить её из вкладки Variables в окно Event Graph и соединить с Brunch. Кстати, после добавления новых нодов и связей стоит нажимать Compile.

Далее в случае, если переменная истинна — то есть дверь может переместить персонажа — с помощью нода Set она делается ложной.

Затем создаётся логика самой телепортации. Достаточно перетянуть в Event Graph переменную TargetPortalDoor и создать для неё отдельный нод Set Can Teleport.

Тогда между ними возникнет небольшой «переходник», из которого нужно вытащить ноды GetWorldRotation и GetWorldLocation. Они возвращают параметры позиции и направления объекта.

Наконец, нужно создать нод Teleport и в соответствующие параметры присоединить Return Value от GetWorldRotation и GetWorldPosition.

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

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

«Блюпринт» готов. Теперь осталось только перетащить две его копии на сцену и назначить им друг друга в переменной TargetDoorTeleport во вкладке Details.

Также Сергей рассказал о сайте BluprintUE, на котором энтузиасты делятся своими «блюпринтами» самых разных механик. Достаточно выделить свою работу в Event Graph, скопировать её и вставить в поле Blueprint (required) на сайте. При публикации этот код превратится в визуализированный «блюпринт», как в движке. Чтобы использовать решения с сайта, достаточно скопировать оттуда нужные ноды.

Комментарии: 0