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

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

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

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

post

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

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

Исходный размер 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
Мы используем файлы cookies для улучшения работы сайта и большего удобства его использования. Более подробную информац...
Показать больше