Как сделать моргающую лампочку в unreal engine

Обновлено: 07.07.2024

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

Blueprints – это своего рода система визуальных событий в Unreal Engine 4, которая позволяет быстро создать прототип вашей игры. Вместо того, чтобы писать подробный код, вам достаточно сделать визуальную поведенческую модель: создать и разместить узлы, а также соединить их в зависимости от последовательности событий и установить каждому определенные свойства.

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

В этом уроке вы научитесь использовать Blueprints для:

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

Начало работы

В первую очередь вам необходимо скачать и разархивировать стартовый проект.

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

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


Для вашего удобства все файлы проекта разбиты на категории и помещены в соответствующие папки, как на этом изображении:


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

Создание персонажа


Справка: Класс Character также подойдет для этих целей, кроме того, он может активировать команду движения по умолчанию. Однако в этот раз вы будете создавать свою собственную систему передвижения, поэтому класса Pawn будет достаточно.

Прикрепление камеры

Камера является своего рода способом для игрока осматривать игровое пространство. Сейчас вам нужно будет создать камеру с видом сверху. Для этого откройте двойным нажатием левой кнопки мыши BP_Player в Content Browser. Теперь вы можете приступить к редактированию.


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

Образ и расположение персонажа




Теперь пришло время создать нового игрового персонажа с именем Pawn. Для сохранения результата вам нужно нажать кнопку Compile и вернуться в главный редактор.

Создание персонажа

Прежде чем игрок сможет контролировать своего персонажа, необходимо указать несколько важных вещей:

  1. Тип персонажа, которым игрок будет управлять;
  2. Место, где этот персонаж появится при старте игры.

Создание игрового режима

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

Вам нужно перейти в Content Browser и найти папку Blueprints. Теперь нажмите кнопку Add New ⇒ Blueprint Class. В появившемся окне выберите Game Mode Base и назовите его GM_Tutorial.


Теперь вам нужно указать, какой класс персонаж Pawn будет использоваться по умолчанию. Для этого дважды щелкните GM_Tutorial, чтобы он открылся.


Прежде чем вы сможете использовать новый игровой режим, необходимо указать его для конкретного игрового уровня. Это делается в настройках игрового мира. Сейчас вам нужно нажать Compile и закрыть редактор Blueprint.

Каждый игровой уровень имеет свои настройки. Вы можете получить доступ к настройкам и изменять их по своему усмотрению, выбрав Window ⇒ World Settings. Другой вариант, как это можно сделать – перейти к панели инструментов и выбрать Settings ⇒ World Settings.


Новая вкладка World Settings откроется рядом с вкладкой Details. Тут вам нужно будет перейти к раскрывающемуся списку для изменения настроек GameMode и выбрать там GM_Tutorial.


Вы можете увидеть, что все классы изменились на те, которые вы выбрали в GM_Tutorial.


Расположение метки Player Start

В процессе создания персонажа, система игрового режима автоматически ищет метку его расположения в игровом пространстве.

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


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

Настройка управления

Назначение команд для выполнения какого-либо действия называется привязкой ключа.

В Unreal вы можете настроить клавиши управления, которые будут выполнять определенное действие или вызывать событие при нажатии на них. События представляют собой это узлы, которые выполняются, когда происходят определенные действия (в этом случае, когда вы нажимаете связанную клавишу). Узлы, подключенные к событию выполняются после инициации события.



Только представьте, насколько бы этот процесс был сложнее, если бы вы вводили для каждой команды специальный код.

Что такое Axis и Action Mappings

Для просмотра настроек ввода вам нужно перейти к Edit ⇒ Project Settings. Слева выберите Input в разделе Engine.



В Unreal доступны два метода для создания привязок клавиш:

  • Action Mapping (Отображение действий): при этом методе, функция имеет только два возможных состояния – активна или не активна. Все действия будут срабатывать только после того, как вы нажмете или отпустите клавишу. Обычно этот метод используется для действий, которые не имеют промежуточного состояния, таких, например, как стрельба из пистолета.
  • Axis(Отображение оси): При выборе этого метода, программа будет показывать числовое значение, называемое значением оси (подробнее об этом позже). События Оси будут запускать каждый кадр, которые как правило используется для действий, требующих дополнительное устройство ввода (манипулятор или компьютерная мышь).

В этом уроке мы рассмотрим, как пользоваться методом Axis.

Создание Movement Mappings

Для начала вам нужно создать две группы отображения осей (Axis). Они дадут возможность создать несколько привязок ключей к одному событию.


MoveForward будет обрабатывать движение персонажа вперед и назад. MoveRight будет обрабатывать перемещение персонажа влево и вправо.


В окне редактора сопоставьте клавиши W и S с MoveForward и клавиши A и D с MoveRight.


Далее вам нужно установить поля Scale.

Функции Axis Value и Input Scale

Значение оси (Axis Value) — это числовое значение, которое определяется типом ввода и тем, как вы планируете его использовать. Посмотрите, как это выглядит на изображении ниже, чтобы лучше понимать, как распределяются числовые значения:


Вы также можете использовать значение Axis, чтобы контролировать скорость персонажа. Например, если вы сдвинете джойстик к краю, значение оси будет равно 1. Если вы поместите его посередине, значение будет равно 0,5.


Вы также можете использовать значение Axis, чтобы указать направление движения. Формула следующая – если вы умножите скорость персонажа на положительное значение Axis, то вы получите положительное смещение. Использование отрицательного значения оси приведет соответственно к отрицательному смещению. Конечное значение этого смещения по отношению к местоположению игрового персонажа определит, в каком направлении он будет двигаться.


Клавиши клавиатуры могут выводить значение оси только равное 1 или 0, однако вы можете использовать масштаб для преобразования его в отрицательное значение. Это делается путем умножения значения Axis на масштаб. Если вы умножите положительное значение (значение Axis) на отрицательное значение (Scale), вы получите отрицательное значение.

Установите значения клавиш S и A, нажав на поле Scale и введя -1.


Движение игрового персонажа

Обратите внимание: вы ищете красный узел в Axis Events, а не зеленый узел в Axis Values.

Повторите процесс для MoveRight.

Использование переменных


Теперь вам нужно перейти перейдите на вкладку Details и изменить название новой переменной на MaxSpeed и ее тип на Float.



Чтобы определить конечную скорость и направление движения необходимо умножить значение MaxSpeed и значение оси. Добавьте узел float * float и подключите к нему Axis Value и MaxSpeed.

Определение направления движения персонажа

Во-первых, вам нужно добавить узел под названием Get Actor Forward Vector:


Во-вторых, необходимо добавить узел Add Movement и соединить узлы между собой следующим образом:


Обратите внимание, белая линия выполняет функцию соединения цепочки исполнения команды. Другими словами, когда игрок перемещает входную ось, то автоматически генерируется событие, которое будет выполнять узел InputAxis MoveForward. Белая линия означает, что когда это произойдет, вы выполните узел Add Movement Input.

Узел Add Movement Input отвечает за выполнение следующих входных данных:

  • Target: устанавливается на перка, который обозначается в таблице красным полем.
  • World Direction: Направление которое служит для указания перемещения цели.
  • Scale Value: в данном случае является максимальной скоростью персонажа.

Вам нужно повторить процесс также для MoveRight, но при этом заменить Get Actor Forward Vector на Get Actor Right Vector.


Добавление функции Offset

Вам нужно перейти к узлу Event Tick, который находится на графике событий. Он должен быть слева и отмечен серым цветом, однако если этот узел отсутствует, вам будет нужно создать его для продолжения работы.


Чтобы добавить функцию Offset, также создайте узлы Consume Movement Input Vector и AddActorLocalOffset и свяжите их следующим образом:


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

Нажмите Compile, вернитесь в главный редактор и нажмите Play. Посмотрите, теперь вы можете управлять вашим персонажем!

Настройка частоты кадров

Выйдите из воспроизведения игры и откройте BP_Player. Далее перейдите к узлу Event Tick и посмотрите на панель Delta Seconds.


Delta Seconds определяет время, прошедшее с момента последнего события. Если при этом вы умножите значение смещения на Delta Seconds, то движение персонажа станет независимым от частоты кадров.


Приведем пример: персонаж имеет значение максимальной скорости=100. Если с момента последнего события прошла секунда, то получается, что перк переместится на 100 единиц. Соответственно, если прошло полсекунды, то его перемещение составит 50 единиц.

Чтобы умножить смещение на Delta Seconds, вам нужно добавить vector * float и подключить узлы следующим образом:



Столкновение с пространством

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

Посмотрите, как это выглядит на изображении:


Взаимодействие персонажа активируется, когда его сфера соприкасается с сферой другого персонажа или объекта.


Активация столкновения

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

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

Теперь переключитесь на график событий и перейдите к узлу AddActorLocalOffset. Тут вам нужно найти вход Sweep и установить для него значение true, щелкнув левой кнопкой мыши по флажку.


Создание объектов


Настройка реакции на столкновение



Теперь вам нужно указать, как будет реагировать персонаж на столкновение с объектом. Если вы не забыли, то тип вашего персонажа – WorldDynamic, так что нужно выбрать реакцию на столкновение именно для этого типа. Теперь перейдите в раздел Collision Responses и измените реакцию на столкновение WorldDynamic на Overlap, щелкнув средний флажок справа от WorldDynamic.


Настройка столкновения

Смотрите, теперь у вас есть новый узел OnComponentBeginOverlap (StaticMesh):


Далее создайте узел DestroyActor и свяжите его с узлом OnComponentBeginOverlap (StaticMesh):


Размещение объекта

Закройте редактор Blueprint и убедитесь, что вы находитесь в папке Blueprints. Теперь разместите несколько бананов (BP_Banana) по всему уровню при помощи мыши.

Теперь нажмите Play и попробуйте собрать несколько бананов при помощи вашего персонажа.

Что делать дальше?

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

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

Как создать фонарик в unreal engine 4 смотреть последние обновления за сегодня на YouPlay.

Создание фонарика в играх на unreal engine 4/Изучение блюпринтов UE4

Создание фонарика в играх на unreal engine 4/Изучение блюпринтов UE4

Как сделать игру? [Unreal engine 4] [Хоррор] [Фонарик]

Как сделать игру? [Unreal engine 4] [Хоррор] [Фонарик]

По всем новостям и т.д есть группа в вк - 🤍

UE4. Create Flash Light. Project Untitled. Создание фонарика.

UE4. Create Flash Light. Project Untitled. Создание фонарика.

В данном видео рассказывается про то как создать фонарик для игры от первого или третьего лица в Unreal Engine 4. На примере Project Untitled. Еще больше видео тут: 🤍 Поддержи проект: 🤍

Создание фонарика| Spring Arm| Яркость фонарика в зависимости от заряда батарейки в Unreal Engine 4

Создание фонарика| Spring Arm| Яркость фонарика в зависимости от заряда батарейки в Unreal Engine 4

Unreal Engine на русском: Как создать простой фонарик для вашего персонажа

Unreal Engine на русском: Как создать простой фонарик для вашего персонажа

Зарядка фонарика в unreal engine 4

Зарядка фонарика в unreal engine 4

Как создать фонарик в Unreal Engine 4

Как создать фонарик в Unreal Engine 4

Unreal Engine 4 - Создание и Настройка простого Фонарика (Читайте описание)

Unreal Engine 4 - Создание и Настройка простого Фонарика (Читайте описание)

- Так как в моих планах создать хоррор игру, то для своего проекта, я решил сделать простой фонарик. - Я не кого не обучаю работать в UE4, я демонстрирую свой проект и его развитие. Всем спасибо.!

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

Blueprints – это своего рода система визуальных событий в Unreal Engine 4, которая позволяет быстро создать прототип вашей игры. Вместо того, чтобы писать подробный код, вам достаточно сделать визуальную поведенческую модель: создать и разместить узлы, а также соединить их в зависимости от последовательности событий и установить каждому определенные свойства.

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

В этом уроке вы научитесь использовать Blueprints для:

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

Начало работы

В первую очередь вам необходимо скачать и разархивировать стартовый проект.

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

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


Для вашего удобства все файлы проекта разбиты на категории и помещены в соответствующие папки, как на этом изображении:


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

Создание персонажа


Справка: Класс Character также подойдет для этих целей, кроме того, он может активировать команду движения по умолчанию. Однако в этот раз вы будете создавать свою собственную систему передвижения, поэтому класса Pawn будет достаточно.

Прикрепление камеры

Камера является своего рода способом для игрока осматривать игровое пространство. Сейчас вам нужно будет создать камеру с видом сверху. Для этого откройте двойным нажатием левой кнопки мыши BP_Player в Content Browser. Теперь вы можете приступить к редактированию.


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

Образ и расположение персонажа




Теперь пришло время создать нового игрового персонажа с именем Pawn. Для сохранения результата вам нужно нажать кнопку Compile и вернуться в главный редактор.

Создание персонажа

Прежде чем игрок сможет контролировать своего персонажа, необходимо указать несколько важных вещей:

  1. Тип персонажа, которым игрок будет управлять;
  2. Место, где этот персонаж появится при старте игры.

Создание игрового режима

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

Вам нужно перейти в Content Browser и найти папку Blueprints. Теперь нажмите кнопку Add New ⇒ Blueprint Class. В появившемся окне выберите Game Mode Base и назовите его GM_Tutorial.


Теперь вам нужно указать, какой класс персонаж Pawn будет использоваться по умолчанию. Для этого дважды щелкните GM_Tutorial, чтобы он открылся.


Прежде чем вы сможете использовать новый игровой режим, необходимо указать его для конкретного игрового уровня. Это делается в настройках игрового мира. Сейчас вам нужно нажать Compile и закрыть редактор Blueprint.

Каждый игровой уровень имеет свои настройки. Вы можете получить доступ к настройкам и изменять их по своему усмотрению, выбрав Window ⇒ World Settings. Другой вариант, как это можно сделать – перейти к панели инструментов и выбрать Settings ⇒ World Settings.


Новая вкладка World Settings откроется рядом с вкладкой Details. Тут вам нужно будет перейти к раскрывающемуся списку для изменения настроек GameMode и выбрать там GM_Tutorial.


Вы можете увидеть, что все классы изменились на те, которые вы выбрали в GM_Tutorial.


Расположение метки Player Start

В процессе создания персонажа, система игрового режима автоматически ищет метку его расположения в игровом пространстве.

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


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

Настройка управления

Назначение команд для выполнения какого-либо действия называется привязкой ключа.

В Unreal вы можете настроить клавиши управления, которые будут выполнять определенное действие или вызывать событие при нажатии на них. События представляют собой это узлы, которые выполняются, когда происходят определенные действия (в этом случае, когда вы нажимаете связанную клавишу). Узлы, подключенные к событию выполняются после инициации события.



Только представьте, насколько бы этот процесс был сложнее, если бы вы вводили для каждой команды специальный код.

Что такое Axis и Action Mappings

Для просмотра настроек ввода вам нужно перейти к Edit ⇒ Project Settings. Слева выберите Input в разделе Engine.



В Unreal доступны два метода для создания привязок клавиш:

  • Action Mapping (Отображение действий): при этом методе, функция имеет только два возможных состояния – активна или не активна. Все действия будут срабатывать только после того, как вы нажмете или отпустите клавишу. Обычно этот метод используется для действий, которые не имеют промежуточного состояния, таких, например, как стрельба из пистолета.
  • Axis(Отображение оси): При выборе этого метода, программа будет показывать числовое значение, называемое значением оси (подробнее об этом позже). События Оси будут запускать каждый кадр, которые как правило используется для действий, требующих дополнительное устройство ввода (манипулятор или компьютерная мышь).

В этом уроке мы рассмотрим, как пользоваться методом Axis.

Создание Movement Mappings

Для начала вам нужно создать две группы отображения осей (Axis). Они дадут возможность создать несколько привязок ключей к одному событию.


MoveForward будет обрабатывать движение персонажа вперед и назад. MoveRight будет обрабатывать перемещение персонажа влево и вправо.


В окне редактора сопоставьте клавиши W и S с MoveForward и клавиши A и D с MoveRight.


Далее вам нужно установить поля Scale.

Функции Axis Value и Input Scale

Значение оси (Axis Value) — это числовое значение, которое определяется типом ввода и тем, как вы планируете его использовать. Посмотрите, как это выглядит на изображении ниже, чтобы лучше понимать, как распределяются числовые значения:


Вы также можете использовать значение Axis, чтобы контролировать скорость персонажа. Например, если вы сдвинете джойстик к краю, значение оси будет равно 1. Если вы поместите его посередине, значение будет равно 0,5.


Вы также можете использовать значение Axis, чтобы указать направление движения. Формула следующая – если вы умножите скорость персонажа на положительное значение Axis, то вы получите положительное смещение. Использование отрицательного значения оси приведет соответственно к отрицательному смещению. Конечное значение этого смещения по отношению к местоположению игрового персонажа определит, в каком направлении он будет двигаться.


Клавиши клавиатуры могут выводить значение оси только равное 1 или 0, однако вы можете использовать масштаб для преобразования его в отрицательное значение. Это делается путем умножения значения Axis на масштаб. Если вы умножите положительное значение (значение Axis) на отрицательное значение (Scale), вы получите отрицательное значение.

Установите значения клавиш S и A, нажав на поле Scale и введя -1.


Движение игрового персонажа

Обратите внимание: вы ищете красный узел в Axis Events, а не зеленый узел в Axis Values.

Повторите процесс для MoveRight.

Использование переменных


Теперь вам нужно перейти перейдите на вкладку Details и изменить название новой переменной на MaxSpeed и ее тип на Float.



Чтобы определить конечную скорость и направление движения необходимо умножить значение MaxSpeed и значение оси. Добавьте узел float * float и подключите к нему Axis Value и MaxSpeed.

Определение направления движения персонажа

Во-первых, вам нужно добавить узел под названием Get Actor Forward Vector:


Во-вторых, необходимо добавить узел Add Movement и соединить узлы между собой следующим образом:


Обратите внимание, белая линия выполняет функцию соединения цепочки исполнения команды. Другими словами, когда игрок перемещает входную ось, то автоматически генерируется событие, которое будет выполнять узел InputAxis MoveForward. Белая линия означает, что когда это произойдет, вы выполните узел Add Movement Input.

Узел Add Movement Input отвечает за выполнение следующих входных данных:

  • Target: устанавливается на перка, который обозначается в таблице красным полем.
  • World Direction: Направление которое служит для указания перемещения цели.
  • Scale Value: в данном случае является максимальной скоростью персонажа.

Вам нужно повторить процесс также для MoveRight, но при этом заменить Get Actor Forward Vector на Get Actor Right Vector.


Добавление функции Offset

Вам нужно перейти к узлу Event Tick, который находится на графике событий. Он должен быть слева и отмечен серым цветом, однако если этот узел отсутствует, вам будет нужно создать его для продолжения работы.


Чтобы добавить функцию Offset, также создайте узлы Consume Movement Input Vector и AddActorLocalOffset и свяжите их следующим образом:


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

Нажмите Compile, вернитесь в главный редактор и нажмите Play. Посмотрите, теперь вы можете управлять вашим персонажем!

Настройка частоты кадров

Выйдите из воспроизведения игры и откройте BP_Player. Далее перейдите к узлу Event Tick и посмотрите на панель Delta Seconds.


Delta Seconds определяет время, прошедшее с момента последнего события. Если при этом вы умножите значение смещения на Delta Seconds, то движение персонажа станет независимым от частоты кадров.


Приведем пример: персонаж имеет значение максимальной скорости=100. Если с момента последнего события прошла секунда, то получается, что перк переместится на 100 единиц. Соответственно, если прошло полсекунды, то его перемещение составит 50 единиц.

Чтобы умножить смещение на Delta Seconds, вам нужно добавить vector * float и подключить узлы следующим образом:



Столкновение с пространством

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

Посмотрите, как это выглядит на изображении:


Взаимодействие персонажа активируется, когда его сфера соприкасается с сферой другого персонажа или объекта.


Активация столкновения

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

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

Теперь переключитесь на график событий и перейдите к узлу AddActorLocalOffset. Тут вам нужно найти вход Sweep и установить для него значение true, щелкнув левой кнопкой мыши по флажку.


Создание объектов


Настройка реакции на столкновение



Теперь вам нужно указать, как будет реагировать персонаж на столкновение с объектом. Если вы не забыли, то тип вашего персонажа – WorldDynamic, так что нужно выбрать реакцию на столкновение именно для этого типа. Теперь перейдите в раздел Collision Responses и измените реакцию на столкновение WorldDynamic на Overlap, щелкнув средний флажок справа от WorldDynamic.


Настройка столкновения

Смотрите, теперь у вас есть новый узел OnComponentBeginOverlap (StaticMesh):


Далее создайте узел DestroyActor и свяжите его с узлом OnComponentBeginOverlap (StaticMesh):


Размещение объекта

Закройте редактор Blueprint и убедитесь, что вы находитесь в папке Blueprints. Теперь разместите несколько бананов (BP_Banana) по всему уровню при помощи мыши.

Теперь нажмите Play и попробуйте собрать несколько бананов при помощи вашего персонажа.

Что делать дальше?

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

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


Изучение Blueprint – лучший вариант быстрого старта в Unreal Engine. Статья проведёт читателей по основам Blueprint, расскажет о его применении и даст несколько советов по поводу баланса между C++ и BP.

🎮 Как использовать Blueprint для быстрого прототипирования игр на Unreal Engine 4?

Что нужно знать перед прочтением этой статьи?

Предполагается, что читатель уже базово знаком с Unreal Engine 4: умеет создавать проекты, приблизительно знает, где в интерфейсе что находится, а также имеет представление об основных концепциях движка. Также предполагается, что читатель знаком с программированием на любом императивном языке и имеет опыт работы с отладчиком (вне зависимости от языка программирования и IDE).

Что такое Blueprint?

Под Blueprint (BP) могут подразумевать две связанные, но всё-таки разные вещи: систему визуального программирования и созданные с помощью этой системы объекты . Суть этой системы заключается в программировании игровой логики посредством основанного на графах скриптового языка.

Пример графа Blueprint

Пример графа Blueprint

Как и многие подобные языки, он позволяет создавать классы и их экземпляры (объекты), которые зачастую называют просто блюпринтами.

Для чего нужен Blueprint?

Как ни странно, Blueprint нужен не только для программирования акторов (игровых объектов) и подобных игровых вещей. Приведём несколько примеров использования этого инструмента:

  • UI: логика для виджетов может быть реализована в Blueprint;
  • Анимации: в Unreal Engine есть понятие Animation Blueprint – фактически это особая версия BP, в которой имеются дополнительные фичи и целью которой является описание анимационной части поведения объекта;
  • Расширения редактора: с помощью BP можно создавать так называемые Editor Utility, фактически представляющие собой скрипты для редактора. Их можно использовать для автоматизации рутинных задач или даже для серьезного дополнения возможностей редактора.

Какова польза от Blueprint?

Если мы говорим про систему визуальной разработки, основным её преимуществом является возможность дать всю мощь программирования в руки не-программистов: гейм-дизайнеров, левел-дизайнеров, нарративных дизайнеров и любых других что-угодно-дизайнеров. Фактически это основа философии и причина добавления системы в движок: позволить всей команде работать на равных условиях.

Если же говорить о BP имея в виду классы и экземпляры классов, то их главным преимуществом является, пожалуй, возможность визуального создания игровых объектов: расположение различных компонентов (компонент – обособленная функциональность, предназначенная для переиспользования) в пространстве, а также их настройка прямо из редактора. Это аналогичная упомянутой в предыдущем абзаце идея, только касающаяся не логики, а данных – настроек компонентов.

Обзор редактора Blueprint и создание класса

Для создания BP-классов существует несколько путей, но основной – сделать т.н. ассет Blueprint из панели Content Browser. Необходимо щёлкнуть правой кнопкой мыши в Content Browser и выбрать Blueprint Class:

Создание BP-класса

Создание BP-класса

На следующем шаге необходимо выбрать базовый класс для создаваемого:

Выбор базового класса

Выбор базового класса

По двойному щелчку на созданном классе будет открыт редактор BP. Остановимся на нём (на скриншоте ниже создан BP-класс, наследник класса Actor):

Переменные в Blueprint

Создадим унаследованный от Actor BP-класс, назовём его Bulb и с помощью кнопки “Add Component” добавим в него точечный источник света ( Point Light Component ):

Добавление компонента

Добавление компонента

Создадим простую сцену, на которой расположим выполняющий роль пола куб, а посередине – наш актор:

Тестовая сцена

Тестовая сцена

Запустим проект и убедимся, что куб освещён скучным белым светом:

Скучный белый свет

Скучный белый свет

Вернёмся к нашему BP и с помощью кнопки “+ Variable” создадим новую переменную, используя которую будет можно задать цвет источника света. Назовём её LightColor , выделим в секции “Variables” панели “My Blueprint” и переключимся на панель “Details”, где будут отображены настройки переменной:

Добавление переменной Настройки переменной

Выберем тип “Linear Color” и установим флаг “Instance Editable”. Этот флаг позволит задавать значение переменной для каждого экземпляра класса.

Данные есть, теперь к логике. Перейдём в “Event Graph” к событию BeginPlay . Это событие запустится, когда актор будет добавлен (заспаунен) на уровень. Потянем левой кнопкой мыши за отмеченный сиреневым элемент:

BeginPlay " data-src="https://media.proglib.io/posts/2021/11/22/8e853eb99caaaa0b1050c0d2a3d7177a.jpg" > Событие BeginPlay

Отпустим левую кнопку мыши – тут же появится окно выбора функции. Снимем флаг “Context Sensitive” (без него редактор предложит все возможные функции, а не только те, которые укладываются в текущий контекст) и найдём функцию Set Light Color компонента Point Light Component :

Панель выбора действия

Панель выбора действия

Должно получиться так:

BeginPlay " data-src="https://media.proglib.io/posts/2021/11/22/128adbea7b380ab2417eee15f84d9cc7.jpg" > Установка цвета на срабатывании BeginPlay

Белая линия означает порядок выполнения. Иначе говоря, белая линия – это возможный путь передачи управления из одной BP-ноды (узла BP-графа) в другую.

Цветные пины (pin) означают входные данные/выходные данные. Как видно на скриншоте, Set Light Color ожидает три значения на входе:

  • Target – объект, на котором будет вызвана функция. Здесь ожидается Point Light Component . Перетянем его зажатой левой кнопкой мыши из секции “Variables” панели “My Blueprint”. После отпускания кнопки мыши, появится выбор:

Нас интересует получение компонента, а не его перезапись, поэтому выбираем Get PointLight . Соединим выходной пин создавшейся ноды с входным пином Target ноды-вызова Set Light Color :

  • New Light Color – новый цвет для источника света. Его необходимо взять из созданной нами переменной LightColor . Для закрепления проделайте это сами.
  • sRGB – булев флаг. Значение задано на самой ноде: флаг отмечен – значение истино, снят – ложно.

После изменения BP его необходимо скомпилировать. Для этого есть специальная кнопка на панели инструментов в верхней части редактора.

Тулбар BP-редактора. Кнопка для компиляции – крайняя слева

Тулбар BP-редактора. Кнопка для компиляции – крайняя слева

При успешной компиляции кнопка будет гореть зелёным:

Индикатор успешной компиляции

Индикатор успешной компиляции

Перейдем к редактору уровня, выделим наш актор и обратимся к панели “Details”:

Свойства актора

Свойства актора

В разделе “Default” можно видеть созданную нами переменную Light Color . Нажмем на квадратно-чёрную её часть и выберем какой-нибудь цвет. Запустим проект и убедимся, что источник света изменил цвет:

Нескучный голубой цвет

Нескучный голубой цвет

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

Операторы ветвления

Вернёмся к переменной LightColor и сделаем из неё массив. Для этого необходимо нажать на иконку справа от типа переменной и выбрать иконку с квадратами три на три:

Выбор модификации переменной: одиночное значение, массив, множество и карта/словарь (map)

Выбор модификации переменной: одиночное значение, массив, множество и карта/словарь (map)

Вероятно, редактор попросит вас подтвердить: действительно ли вы хотите изменить тип переменной: смело отвечайте “Да”. После этого ваш граф сломается:

Граф сломался

Граф сломался

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

Создадим новую переменную CurrentColorIndex типа Integer , скомпилируем BP и зададим переменной значение по умолчанию – 0 :

Значение переменной по умолчанию

Значение переменной по умолчанию

Создадим такую конструкцию:

Мне надо подписать картинку, но я сам не знаю, что здесь происходит

Мне надо подписать картинку, но я сам не знаю, что здесь происходит

Главная нода, на которую стоит обратить внимание – Branch, представляющая собой обыкновенный if. На входе – булево значение, выходы – это передача управления либо по одному пути, либо по другому.

Булево значение является результатом строгого сравнения значения CurrentColorIndex и размера массива LightColor . Внимательный читатель догадывается к чему идёт дело: к наивной реализации цикла.

Правая часть блюпринта

Правая часть блюпринта

В случае, если элементы в массиве ещё не закончились, взять текущий и установить цвет источника света равный этому элементу, подождать одну секунду, увеличить CurrentColorIndex на один и перейти обратно к условию. Если элементы закончились, установить цвет в чёрный и завершить выполнение.

Итоговый блюпринт целиком

Итоговый блюпринт целиком

Добавим цветов в находящийся на уровне актор:

Массив цветов внутри нашего актора

Массив цветов внутри нашего актора

Запустив игру, проверим результат.

Циклы

Конструкцию выше можно с легкостью заменить на встроенный в BP цикл For Each :

Встроенная в BP нода-цикл

Встроенная в BP нода-цикл

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

Запустим и убедимся, что всё работает. Ничего не работает? У меня тоже.

Это старый баг движка (или фича – уже никто не знает). Delay внутри For each игнорируется, поэтому цикл выполняется настолько быстро, что становится невозможным заметить реальную смену цвета, а лишь только черный экран.

Функции

Для возможности визуального отслеживания результатов работы нашего BP, вернём вариант с Branch . В секции “Functions” панели “My Blueprint” создадим новую функцию SetColor :

Создание новой функции

Создание новой функции

В панели “Details” добавим параметр для функции с именем NewColor и типом Linear Color :

Создание нового параметра функции

Создание нового параметра функции

Заметьте, для новой функции в рабочей области BP-редактора появилась новая вкладка. Перенесём туда вызов функции SetLightColor на компоненте Point Light:

Функция Set Color

Функция Set Color

Заменим оба вызова Set Light Color в Event Graph на вызов нашей функции:

Обновлённый блюпринт

Обновлённый блюпринт

Запустим проект и убедимся, что всё работает, как и работало.

Отладка Blueprint

В редакторе имеется встроенный отладчик, позволяющий устанавливать точки останова и просматривать значение переменных в BP прямо во время выполнения. Поставим точку останова на вызове Set Light Color в функции Set Color . Для этого кликните по ноде правой кнопкой мыши и выберите “Add Breakpoint”:

Брейкпоинт на BP-ноде

Брейкпоинт на BP-ноде

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

Сработавший брейкпоинт

Сработавший брейкпоинт

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

Тулбар дебаггера

Тулбар дебаггера

Баланс между C++ и Blueprint

  • Код на C++ работает быстрее;
  • C++ гораздо лучше справится с задачами, связанными с булевой логикой, математикой и большими системами;
  • На C++ рекомендуется рекомендуется писать ядро игры и реализовывать критически важную функциональность;
  • Часть функциональности и определённых в C++ данных можно держать закрытыми для Blueprint, не загрязняя ими API.

Blueprint

  • Достаточно производительный, но медленнее C++;
  • Blueprint гораздо проще использовать для прототипирования;
  • Гораздо более быстрые итерации разработки, чем при использовании C++;
  • Больше участников команды могут работать с Blueprint;
  • Фактически каждый BP является ассетом. Иначе говоря BP – это контент. В некоторых случаях это важно.

C++ лучше использовать для core-функциональности, в то время как BP – для чего-либо специфичного для отдельно-взятого уровня или зависимого от другого контента. Ещё один вариант, когда BP предпочтительней – это нередкий случай, в котором необходимо создать содержащий несколько компонентов объект, особенно если расположение этих компонентов в пространстве важно. Объекты такого рода гораздо удобнее создавать/изменять в редакторе, с чем и связана рекомендация реализовывать их через BP.

Для команды из одного человека и небольшого проекта вполне приемлемо использовать только BP. Использование же только C++ (в любом проекте) вряд ли является обоснованным решением.

Официальный портал от Epic Games предлагает не только курсы по BP, однако мы рекомендуем в первую очередь пройти этот. Он содержит обзор BP-составляющей движка, философии и идей стоящих за BP, а также немалое количество советов из разряда “я бы хотел, чтобы мне сказали это, когда я начинал”.

Вывод

Blueprint – система визуального программирования в UE, призванная увеличить количество участников команды, способных самостоятельно создавать игровую логику. Блюпринтами также называют определённые через эту систему классы. BP поддерживает все фичи обычных языков программирования: переменные, функции, операторы ветвления, циклы. В редакторе UE имеется встроенный отладчик BP. Перед началом проекта стоит серьезно задуматься о балансе между C++ и BP, которого стоит придерживаться.

Несмотря на кажущуюся простоту BP – система с большим количеством тонкостей, в особенности если смешивать её с C++. Полное изучение всех особенностей работы с BP может занять время. Удачи в обучении!

Читайте также: