big

Система здоровья

Сначала мы создадим простую систему здоровья для наших противников, которая позволит им умирать по человечески.

Заходим в BP_Enemy и создаем две переменные float типа — Health и Max Health. Первая отвечает за текущее здоровье, вторая за максимально доступное.

Устанавливаем начальное значение здоровья

post

В Begin Play подключаем вот такой код, после чего устанавливаем базовое значение переменной Max Health на желаемое.

Создаем ивент урона

big
Исходный размер 1920x1010

Ура, наши враги теперь могут получать урон и, в случае если здоровье дойдет до нуля, они исчезнут.

Виджеты

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

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

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

User Interface

Пользовательский (UI) — «лицо» программы или устройства, с которым взаимодействует человек. Это кнопки, меню, иконки, текст и все визуальные элементы которые вы видите на экране.

Какой интерфейс есть на экране в шутере?

Диегетический интерфейс

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

А теперь сделаем свой виджет

post

Создадим Widget Blueprint.

Сразу добавляем в него Canvas Panel, она поможет нам организовать все остальные элементы внутри виджета.

Изображения

Супер простой виджет — просто 2D изображение. Что с ним можно делать?

  • Настраивать размер,
  • менять положение на экране,
  • менять картинку и тинт этой картинки,
  • делать ей тайлинг,
  • настраивать прозрачность картинки

Как вставить свою картинку

post

Ищем Appearance, раскрываем Brush и в Image выбираем или перетаскиваем нужноое нам изображение.

Кстати, вставлять можно не только картинки, но и материалы! Главное — сменить им режим на UserInterface.

После размещения чего угодно

post

Обязательно нужно настроить якорь! Виджет крепится к якорю и существует на холсте относительно него.

Неправильно выставленный якорь может привести к тому, что виджет сползет в неверное место.

Настроить якорь очень просто — в редакторе уже есть пресеты положений якоря, и в 99,9% случаев нужно просто выбирать наиболее близкое к фактическому положение.

Практика: делаем прицел

  1. Создаем Image
  2. Настраиваем якорь и положение в центре экрана
  3. Настраиваем размер
  4. Скачиваем из интернета картинку с прицелом и вставляем

Добавляем интерфейс на экран

Исходный размер 1920x1010

Добавляем в Begin Play две вот такие ноды. Первая создает выбранный вами виджет, потом мы запоминаем его в переменную, а следующая нода вывод картинку на экран.

Текстовые блоки

Одни из наиболее часто встречающихся виджетов. Мы с его помощью сделаем виджет обоймы.

Показываем патроны в обойме

post

Создаем Binding параметра внутри виджета. У нас открывается функция и в ней мы пишем вот такой код. Он подтягивает переменную, отображающую кол-во патронов, из персонажа.

Исходный размер 1920x1010

Практика: показываем обойму!

Теперь сделайте Binding второму текстовому блоку, скопируйте туда код и перепишите так, чтобы он показывал максимальное количество патронов, а не текущее!

Прогресс бары

Делаем собственное HP

post

Сначала добавим переменную Max HP в нашем персонаже. Установим ей, сколько хотим, чтобы у персонажа было здоровья. И в Begin Play добавим вот такой код.

post

Создаем прогресс бар в нашем UI_HUD и переименовываем в HP_Bar, и Percent устанавливаем на 1.

post

В Ивенте Any Damage добавляем такой код в False у Branch. Print String можно удалить.

Делаем HP врагам

Создаем новый виджет — в нем мы будем делать хп нашим врагам! Называем WB_EnemyHP.

Создаем Canvas Panel и размещаем Progress Bar в центре экрана.

Открываем BP_Enemy (который родитель) и добавляем ему Widget Component. В Widget Class добавляем только что созданный виджет.

В Any Damage перед Branch добавляем такой код.

Исходный размер 1920x1010

Сделаем виньетку

Чтобы игрок понимал, когда он получает урон, обычно в играх показывают разные эффекты по краям экрана.

Материал для виньетки

Исходный размер 1920x1010
post

Создаем Image, ставим в центр экрана и делаем размер 1920 на 1080, а вместо картинки ставим наш материал.

Ставим Render Opacity на 0

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

Анимации

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

post

Анимируем виньетку

Открываем вкладку Animation, Создаем анимацию, называем ее Damage, выбираем и в соседнем окне нажимаем Add и добавляем Image.

post

Добавляем Render Opasity и переходим к таймлайну справа. Перемещаем ползунок на 0.50 и ставим значение 1. Потом — на 1 и ставим 0.

post

Подключаем анимацию

Создаем Custom Event и называем его VignetteAnim и делаем вот такой код, который и будет запускать нашу анимацию.

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

Исходный размер 1920x1010

Практика: анимируем прицел

Теперь нам нужно сделать анимацию прицела на выстрел:

  1. Создайте анимацию, добавьте в нее изображение прицела
  2. Добавьте ему transform
  3. Сделайте быструю анимацию
  4. Создайте ивент для анимации в виджете
  5. Подключите ивент с анимацией к ивенту Left Mouse Buttom в персонаже.

Домашнее задание

Собрать вашу локацию в движке — и расставить противников.

В идеале — начать ее украшать и расставлять какие-то ассеты, но достаточно просто принести ее на занятие в ГОТОВОМ виде.

Виджеты, анимации
Проект создан 09.06.2026